source

RFC2822 date in moment.js를 변환하려고 할 때 "감각 경고: moment construction back to js Date"

manycodes 2023. 9. 23. 22:50
반응형

RFC2822 date in moment.js를 변환하려고 할 때 "감각 경고: moment construction back to js Date"

저는 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()construction은 모든 브라우저에서 날짜 문자열을 RFC2822 또는 ISO 형식으로 인식합니다.A를 구성할 때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)

파이어폭스 -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에서 제안한 것처럼, set

moment.suppressDeprecationWarnings = true;

  1. 저는 입력된 폴백을 순간적으로 덮어쓸 것을 제안합니다.

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

(3)이 모든 경고를 억제하기 때문에 (4)는 날짜 시공 폴백만 억제합니다.(4)를 사용하면 다음을 얻을 수 있습니다.Invalid Dates로서new Date()가 사용되고 콘솔에서 다른 사용 중지 항목을 볼 수 있으므로, 애플리케이션에서 모멘트를 업그레이드하거나 사용 중지된 메서드를 교체할 수 있습니다.

string(내 이슈처럼) 필터를 사용하여 문자열을 잠시 날짜로 변환할 수 있습니다.이것은 건설 경고의 순간을 처리할 것입니다.

$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'}}

제 경우에는 양식 데이터에 포함할 날짜 시간을 생성하려고 했습니다.하지만 내가 접속한 문자열의 형식은 "10-9월-2020 10:10"처럼 보였기 때문에 순간을 사용하려고 할 때는 다음과 같습니다.

myDate = '10-Sep-2020 10:10';

moment(myDate).format('YYYY-MM-DD HH:mm:ss');

감가상각 경고를 받았습니다.문자열을 사용하여 날짜를 작성하는 것은 문제가 없지만 전달하는 내용을 순간적으로 알려주시면 됩니다.에 명시적으로 명시된 것과 같이, 예를 들어 수신하려는 형식

moment(myDate, 'DD-MMM-YYYY HH:mm').format('YYYY-MM-DD HH:mm:ss');

:2020-09-10 10:10:00경고는 사라지고, 순간은 행복하며, 지속을 위한 날짜 시간 형식이 준비되어 있습니다.

위의 답변에 나와 있는 바와 같이.날짜 형식을 제공하는 것이 효과가 있을 것입니다.

제가 왜 다음 줄의 코드로 감가 상각 메시지를 받습니까?String + 형식이 이 문제를 해결할 수 있다고 생각했습니다.moment.tz('2015:08:20 14:33:20', 'YYYY:MM:DD HH:mm:ss', 'America/New_York') 또한 제공되는 날짜 형식에 대한 통제권이 없습니다.다로 수 것을 있습니다.'YYYY-MM-DDTHH:mm:ss'다.그러나 문서에 따르면 코드 라인은 작동해야 합니다.여기 제가 보고 있는 감가상각 메시지가 있습니다.

"감가상각 경고: 제공된 값이 공인된 RFC2822 또는 ISO 형식이 아닙니다. 모멘트 구성은 js Date()로 되돌아갑니다. 이는 모든 브라우저 및 버전에서 신뢰할 수 없습니다.RFC2822/ISO 날짜가 아닌 형식은 권장되지 않으며 다가오는 주요 릴리스에서 제거됩니다.자세한 내용은 http://momentjs.com/guides/ #/ warnings/js-date/ 를 참조하시기 바랍니다."

Moment의 사용 범위가 너무 넓어서 시간이 지남에 따라 현재 버전을 평가절하하는 것이 불가능합니다.대체 옵션 Migration of moment.js에 대한 이 게시물을 확인하십시오.

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

반응형