[英]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.