엑셀에서 가져오는 날짜 값의 형식은 Date 객체인 경우도 있고, string(예를 들면 '2022.02.10', '2022-02-10' 등)인 경우도 있다.
아래 코드에서는 이렇게 가져온 날짜 값을 checkDateValidate함수가 originalDay와 alterableDay 매개변수로 가져와 사용하고 있다.
import moment from 'moment';
function checkDateValidate(originalDay, alterableDay) {
return moment(new Date(originalDay)).isValid() &&
moment(new Date()).subtract(3, 'months') <= moment(originalDay) &&
moment(new Date(originalDay)) <= moment(new Date())
? new Date(originalDay)
: moment(new Date(alterableDay)).isValid() &&
moment(new Date()).subtract(3, 'months') <= moment(alterableDay) &&
moment(new Date(alterableDay)) <= moment(new Date())
? new Date(alterableDay)
: new Date();
}
export default checkDateValidate;
이때 momentjs에서 다음과 같은 warning이 발생하는데 이유는 moment 함수 안에 들어간 value의 포멧이 RFC2822 또는 ISO format이 아니기 때문이라고 메세지에서 설명하고 있다.
Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.
Arguments:
[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: 202222-09-01, _f: undefined, _strict: undefined, _locale: [object Object]
Error
at Function.createFromInputFallback (https://oms.modument.co.kr/_next/static/chunks/75fc9c18-dbea95b340aace72.js:1:3284)
at Un (https://oms.modument.co.kr/_next/static/chunks/75fc9c18-dbea95b340aace72.js:1:27649)
at zn (https://oms.modument.co.kr/_next/static/chunks/75fc9c18-dbea95b340aace72.js:1:30995)
at Zn (https://oms.modument.co.kr/_next/static/chunks/75fc9c18-dbea95b340aace72.js:1:30861)
at In (https://oms.modument.co.kr/_next/static/chunks/75fc9c18-dbea95b340aace72.js:1:30579)
at $n (https://oms.modument.co.kr/_next/static/chunks/75fc9c18-dbea95b340aace72.js:1:31353)
at qn (https://oms.modument.co.kr/_next/static/chunks/75fc9c18-dbea95b340aace72.js:1:31387)
at s (https://oms.modument.co.kr/_next/static/chunks/75fc9c18-dbea95b340aace72.js:1:162)
at y (https://oms.modument.co.kr/_next/static/chunks/pages/batchOrder/uploadOrderList-e6f2c168f9391c49.js:1:3406)
at te (https://oms.modument.co.kr/_next/static/chunks/pages/batchOrder/uploadOrderList-e6f2c168f9391c49.js:1:6510)
originalDay, alterableDay의 매개변수 값의 포멧을 Date 객체로 바꾸어 포멧을 일치시켜주니 문제가 해결되었다.
해결된 코드는 다음과 같다.
import moment from 'moment';
function checkDateValidate(originalDay, alterableDay) {
return moment(new Date(originalDay)).isValid() &&
moment(new Date()).subtract(3, 'months') <= moment(new Date(originalDay)) // 이 부분이 원래 moment(originalDay)로 되어 있었다
&&
moment(new Date(originalDay)) <= moment(new Date())
? new Date(originalDay)
: moment(new Date(alterableDay)).isValid() &&
moment(new Date()).subtract(3, 'months') <= moment(new Date(alterableDay)) //이 부분도 원래 moment(alterableDay)로 되어 있었다.
&&
moment(new Date(alterableDay)) <= moment(new Date())
? new Date(alterableDay)
: new Date();
}
export default checkDateValidate;