development

moment.js에서 RFC2822 날짜를 변환하려고 할 때“사용 중단 경고 : 모멘트 생성이 js 날짜로 되돌아 감

big-blog 2020. 6. 11. 07:52
반응형

moment.js에서 RFC2822 날짜를 변환하려고 할 때“사용 중단 경고 : 모멘트 생성이 js 날짜로 되돌아 감


moment.js를 사용하여 서버 측 날짜 시간을 현지 시간으로 변환하려면 다음 코드를 사용하고 있습니다.

 moment(moment('Wed, 23 Apr 2014 09:54:51 +0000').format('lll')).fromNow()

그러나 나는 얻고있다 :

사용 중단 경고 : 모멘트 생성이 js Date로 폴백합니다. 이것은 권장되지 않으며 향후 주요 릴리스에서 제거 될 예정입니다. 자세한 내용은 https://github.com/moment/moment/issues/1407참조하십시오 .

제거 할 수없는 것 같습니다! 어떻게 고칠 수 있습니까?


경고를 없애려면 다음 중 하나를 수행해야합니다.

  • 날짜 형식의 ISO 형식 버전을 전달하십시오.

    moment('2014-04-23T09:54:51');

  • 지금 가지고있는 문자열을 전달하되, 문자열이 어떤 형식인지 Moment에 알려주십시오.

    moment('Wed, 23 Apr 2014 09:54:51 +0000', 'ddd, DD MMM YYYY HH:mm:ss ZZ');

  • 문자열을 JavaScript Date 객체로 변환 한 다음 Moment에 전달하십시오.

    moment(new Date('Wed, 23 Apr 2014 09:54:51 +0000'));

마지막 옵션은 더 이상 사용되지 않는 콘솔 경고와 함께 Moment가 현재 지원하는 기본 폴백입니다. 그들은 향후 릴리스에서이 대체를 지원하지 않을 것이라고 말합니다. 그들은 사용 new Date('my date')이 너무 예측할 수 없다고 설명합니다 .


대안으로, 설정하여 사용 중단 경고가 표시되지 않도록 할 수 있습니다 moment.suppressDeprecationWarnings = true;


날짜 구성은 moment내부적으로 new Date()자바 스크립트를 사용합니다 . new Date()구조는 하나의 날짜 문자열 인식 RFC2822 또는 ISO 모든 브라우저에서 형식을. moment이러한 형식이 아닌 날짜를 가진 객체를 구성 할 때 사용 중단 경고가 발생합니다.

지원 중단 경고가 표시되지만 일부 형식의 경우 moment객체가 Chrome에서는 성공적으로 생성되지만 Firefox 또는 Safari에서는 생성되지 않습니다. 이로 인해 Chrome에서 날짜를 처리하면 항상 예상대로 결과가 나오고 다른 경우가 발생할 수 Invalid Date있습니다.

다음을 고려하십시오 02.02.2018.

크롬-- moment("02.02.2018")._d>Fri Feb 02 2018 00:00:00 GMT+0530 (India Standard Time)

Firefox-- moment("02.02.2018")._d>Invalid Date

사파리-- moment("02.02.2018")._d>Invalid Date

따라서 moment.js권장 / 표준 형식을 사용하지 않는 경우에는 위험을 감수해야합니다.

사용 중단 경고를 억제하려면 ,

  1. 이전 답변에서 @Joe Wilson이 제안한 것처럼 moment건설 날짜 형식을 지정하십시오 .

예 : moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");

  1. ISO 또는 RFC2822 형식으로 날짜를 제공하십시오.

예 : moment("2018-02-01T18:30:00.000Z")-ISO 형식

moment("Thu, 01 Feb 2018 18:30:00 GMT")- RFC2822 형식 - Github에서의 형식

  1. 이전 답변에서 @niutech이 제안한대로 설정하십시오.

moment.suppressDeprecationWarnings = true;

  1. 입력 폴백을 즉시 덮어 쓰는 것이 좋습니다.

    moment.createFromInputFallback=function (config){
        config._d = new Date(config._i);
    }
    

(3)은 모든 경고를 억제하므로 (4)는 날짜 구성 폴 백만 억제합니다. (4)를 사용 Invalid Date하면 내부 new Date()를 사용하고 콘솔에서 다른 지원 중단을 볼 수 있으므로 순간을 업그레이드하거나 사용되지 않는 방법을 응용 프로그램에서 교체 할 수 있습니다.


string내 문제처럼 API에서 날짜가 전달 되면 필터를 사용하여 문자열을 잠시 날짜로 변환 할 수 있습니다. 이것은 순간 건설 경고를 처리합니다.

$scope.apiDate = 10/29/2017 18:28:03";

angular.module('myApp').filter('stringToDate', function() {
  return function(value) {
     return Date.parse(value);
  };  
});

보기에 추가하십시오.

{{apiDate | stringToDate | amDateFormat:'ddd, MMM DD'}}

위의 답변에 표시된대로. 날짜 형식을 제공하면 작동합니다.

Why would I be getting the deprecation message with the following line of code. I thought the String + format was suppose to remedy the issue. moment.tz('2015:08:20 14:33:20', 'YYYY:MM:DD HH:mm:ss', 'America/New_York'). Also, please not I do not have control over the date format being provide. I know I can convert it myself to 'YYYY-MM-DDTHH:mm:ss' then moment does not show the deprecation message. However, according to the documentation, the line of code should work. Here is the deprecation message I am seeing.

"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 and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info."

참고URL : https://stackoverflow.com/questions/23263380/deprecation-warning-moment-construction-falls-back-to-js-date-when-trying-to

반응형