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();