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.

Maliethy·2022년 2월 10일
0

etc

목록 보기
8/9

1. issue

엑셀에서 가져오는 날짜 값의 형식은 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)

2. solution

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;
profile
바꿀 수 있는 것에 주목하자

0개의 댓글