簡體   English   中英

解決Angular App中的Moment.js棄用警告

[英]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提供什么價值,都不能很好地確保日期是ISORFC2822格式。

進一步來說

'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"));

Plunkr

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM