繁体   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