162 lines
3.9 KiB
JavaScript
162 lines
3.9 KiB
JavaScript
const dayjs = require('dayjs');
|
|
|
|
const DateUtility = () => {
|
|
/*
|
|
// *
|
|
// * @param {*} date 기준일
|
|
// * @param {*} val 계산일수
|
|
// * @param {*} type 날짜 포멧
|
|
// * @returns
|
|
*/
|
|
const addDate = (val, type, date) => {
|
|
let returnDt = null;
|
|
const myDate = !date ? dayjs() : dayjs(date);
|
|
returnDt = myDate.add(val || 0, 'day');
|
|
if (type === 'd') returnDt = returnDt.format('YYYYMMDD');
|
|
else if (type) returnDt = returnDt.format(type);
|
|
return returnDt;
|
|
};
|
|
|
|
/*
|
|
// *
|
|
// * @param {*} date 기준일
|
|
// * @param {*} val 계산주수
|
|
// * @param {*} type 날짜 포멧
|
|
// * @returns
|
|
*/
|
|
const addWeek = (val, type, date) => {
|
|
let returnDt = null;
|
|
const myDate = !date ? dayjs() : dayjs(date);
|
|
returnDt = myDate.add(val || 0, 'week');
|
|
if (type === 'd') returnDt = returnDt.format('YYYYMMDD');
|
|
else if (type) returnDt = returnDt.format(type);
|
|
return returnDt;
|
|
};
|
|
|
|
/*
|
|
// *
|
|
// * @param {*} date 기준일
|
|
// * @param {*} val 계산월수
|
|
// * @param {*} type 날짜 포멧
|
|
// * @returns
|
|
*/
|
|
const addMonth = (val, type, date) => {
|
|
let returnDt = null;
|
|
const myDate = !date ? dayjs() : dayjs(date);
|
|
returnDt = myDate.add(val || 0, 'month');
|
|
//월말인 경우 월을 더할 경우 해당월의 마지막날로 설정되도록 처리
|
|
if (
|
|
myDate.format('YYYYMMDD') === myDate.endOf('month').format('YYYYMMDD')
|
|
) {
|
|
returnDt = returnDt.endOf('month');
|
|
}
|
|
if (type === 'd') returnDt = returnDt.format('YYYYMMDD');
|
|
else if (type) returnDt = returnDt.format(type);
|
|
return returnDt;
|
|
};
|
|
|
|
/*
|
|
// *
|
|
// * @param {*} date 기준일
|
|
// * @param {*} val 계산연수
|
|
// * @param {*} type 날짜 포멧
|
|
// * @returns
|
|
*/
|
|
const addYear = (val, type, date) => {
|
|
let returnDt = null;
|
|
const myDate = !date ? dayjs() : dayjs(date);
|
|
returnDt = myDate.add(val || 0, 'year');
|
|
if (type === 'd') returnDt = returnDt.format('YYYYMMDD');
|
|
else if (type) returnDt = returnDt.format(type);
|
|
return returnDt;
|
|
};
|
|
|
|
/*
|
|
// *
|
|
// * @param {*} fromDt 시작일
|
|
// * @param {*} toDt 종료일
|
|
// * @param {*} type 기준
|
|
// * @returns
|
|
*/
|
|
const diff = (fromDt, toDt, type) => {
|
|
let returnDt = null;
|
|
if (fromDt && toDt) {
|
|
const myFromDt = fromDt === 'today' ? dayjs() : dayjs(fromDt);
|
|
const myToDt = toDt === 'today' ? dayjs() : dayjs(toDt);
|
|
let myType = 'days';
|
|
switch (type) {
|
|
case 'w':
|
|
myType = 'weeks';
|
|
break;
|
|
case 'm':
|
|
myType = 'months';
|
|
break;
|
|
case 'y':
|
|
myType = 'year';
|
|
break;
|
|
case 'd':
|
|
myType ='day';
|
|
break;
|
|
default:
|
|
}
|
|
returnDt = myToDt.diff(myFromDt, myType);
|
|
}
|
|
return returnDt;
|
|
};
|
|
|
|
/*
|
|
// *
|
|
// * @param {*} d 기준일
|
|
// * @param {*} f 날짜 포멧
|
|
// * @returns
|
|
*/
|
|
const format = (d, f) => {
|
|
let returnDt = null;
|
|
const myDate = !d ? dayjs() : dayjs(d);
|
|
const myFormat = f || 'YYYYMMDD';
|
|
returnDt = myDate.format(myFormat);
|
|
return returnDt;
|
|
};
|
|
|
|
/*
|
|
// *
|
|
// * @param {*} strDate 기준일
|
|
// * @returns
|
|
*/
|
|
const getDate = strDate => {
|
|
const myDate = !strDate ? dayjs() : dayjs(strDate);
|
|
return myDate
|
|
.hour(0)
|
|
.minute(0)
|
|
.second(0);
|
|
};
|
|
|
|
/*
|
|
// *
|
|
// * @param {*} date 기준일
|
|
// * @param {*} type 날짜 포멧
|
|
// * @returns
|
|
*/
|
|
const getLastDay = (type, date) => {
|
|
let returnDt = null;
|
|
const myDate = !date || date.length < 4 ? dayjs() : dayjs(date);
|
|
returnDt = myDate.endOf('month');
|
|
if (type === 'd') returnDt = returnDt.format('YYYYMMDD');
|
|
else if (type) returnDt = returnDt.format(type);
|
|
return returnDt;
|
|
};
|
|
|
|
return {
|
|
addDate, // 날짜 더하기
|
|
addWeek, // 주 더하기
|
|
addMonth, // 월 더하기
|
|
addYear, // 년도 더하기
|
|
diff, // 두 날짜의 차이 구하기
|
|
format, // 날짜 값을 포맷팅하기
|
|
getDate, // 스트링 날자 값을 data type로 변환하기
|
|
getLastDay, // 해당 년/월의 마지막 날짜 구하기
|
|
};
|
|
};
|
|
|
|
export default DateUtility();
|