[英]Resolving Moment.js Deprecation Warning in Angular App
我在Angular應用程序中使用moment.js收到以下代碼的警告:
moment(value).add(6, 'hours').format("MM/DD/YYYY");
打印到控制台的警告/錯誤是:
moment.js:293棄用警告:提供的值不是公認的RFC2822或ISO格式。 時刻構造回落到js Date(),這在所有瀏覽器和版本中都不可靠。 不鼓勵使用非RFC2822 / ISO日期格式,並將在即將發布的主要版本中刪除。 有關更多信息,請參閱http://momentjs.com/guides/#/warnings/js-date/ 。 參數:[0] _isAMomentObject:true,_isUTC:false,_useUTC:false,_l:undefined,_ i:2007年4月10日,10:00:00 PM,_f:undefined,_strict:undefined,_locale:[object Object]
我查看了警告中鏈接的文檔頁面,但我仍然不清楚我需要更改什么來擺脫棄用警告。 例如,我嘗試添加一個空數組作為第二個參數:
moment(value, []).add(6, 'hours').format("MM/DD/YYYY");
...但是當出現錯誤時,我會在視圖中打印“無效日期”,而不是實際日期。 如何在此處調整語法以消除警告?
更新:提供的值是使用Angular日期管道轉換的UTC值。 所以我通過兩個管道:首先是Angular日期管道,然后是使用時刻的自定義管道。 完整的管道代碼如下所示:
import { Pipe, PipeTransform } from '@angular/core';
const moment = require('moment');
@Pipe({name: 'timeZoneSync'})
export class TimeZoneSyncPipe implements PipeTransform {
constructor() { }
transform(value) {
if (value) {
return moment(value).add(6, 'hours').format("MM/DD/YYYY");
}
}
}
在我看來,我正在使用這樣的兩個管道:
<input class="app-input" [ngModel]="client.dob | timeZoneSync | date:'medium'"
(ngModelChange)="client.dob=$event" name="inputField" type="text" />
您的錯誤消息中有一個鏈接。 它間接引導您: https : //github.com/moment/moment/issues/1407
Quote :
不推薦使用非iso字符串的時刻構造。 這意味着你可以安全地做到
時刻( “2014-04-25T01:32:21.196Z”); // iso string,utc timezone
時刻( “2014-04-25T01:32:21.196 + 0600”); //帶時區的iso字符串
時刻(“2014 04 25”,“YYYY MM DD”); //格式的字符串
但你不能可靠地做(因此它被棄用)
時刻( “2014年4月25日”);
時刻(“Thu Apr 24 2014 12:32:21 GMT-0700(PDT)”);
時刻(“一些看似日期的隨機字符串”);
基本上,無論為TimeZoneSyncPipe
提供什么價值,都不能很好地確保日期是ISO
或RFC2822
格式。
進一步來說
'mediumDate'
參數相當於'MMM d, y'
(例如Jun 15, 2015
),它甚至不接近ISO。
固定
嘗試使用類似"client.dob | date:'yyyy-MM-ddTHH:mm:ss.sssZ' | timeZoneSync"
樹后面的森林
@jonrsharpe非常合適! 我的回答解釋了為什么你看錯了。 但喬恩提出了一個更好的問題。 為什么要繼續翻譯date
- > string
- > date
!?
例
const parsedDate = moment("1981-09-24T05:00:00.000Z");
console.log(parsedDate.format("YYYY/MM/DD"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.