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
권장 / 표준 형식을 사용하지 않는 경우에는 위험을 감수해야합니다.
사용 중단 경고를 억제하려면 ,
- 이전 답변에서 @Joe Wilson이 제안한 것처럼
moment
건설 날짜 형식을 지정하십시오 .
예 : moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");
- ISO 또는 RFC2822 형식으로 날짜를 제공하십시오.
예 : moment("2018-02-01T18:30:00.000Z")
-ISO 형식
moment("Thu, 01 Feb 2018 18:30:00 GMT")
- RFC2822 형식 - Github에서의 형식
- 이전 답변에서 @niutech이 제안한대로 설정하십시오.
moment.suppressDeprecationWarnings = true;
입력 폴백을 즉시 덮어 쓰는 것이 좋습니다.
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."
'development' 카테고리의 다른 글
CSS에서 "보다 큼"또는 ">"문자는 어떻게 사용됩니까? (0) | 2020.06.11 |
---|---|
단일 셀이 아닌 테이블 셀의 열에서 줄 바꿈을 방지하는 방법은 무엇입니까? (0) | 2020.06.11 |
Bash에서 두 목록의 교차 (0) | 2020.06.11 |
모양 xml의 테두리 (0) | 2020.06.11 |
pymongo로 mongodb를 정렬하는 방법 (0) | 2020.06.11 |