Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular应用程序中的Resolving Moment.js弃用警告_Javascript_Angular_Date_Momentjs - Fatal编程技术网

Javascript Angular应用程序中的Resolving Moment.js弃用警告

Javascript Angular应用程序中的Resolving Moment.js弃用警告,javascript,angular,date,momentjs,Javascript,Angular,Date,Momentjs,我在Angular应用程序中使用moment.js获得以下代码的警告: moment(value).add(6, 'hours').format("MM/DD/YYYY"); 打印到控制台的警告/错误为: moment.js:293弃用警告:提供的值不在 公认的RFC2822或ISO格式。建筑回到js的那一刻 Date(),它在所有浏览器和版本中都不可靠。不 不鼓励使用RFC2822/ISO日期格式,并将在 即将发布的主要版本。请参阅 更多信息。 参数:[0]\u IsamentintObje

我在Angular应用程序中使用moment.js获得以下代码的警告:

moment(value).add(6, 'hours').format("MM/DD/YYYY");
打印到控制台的警告/错误为:

moment.js:293弃用警告:提供的值不在 公认的RFC2822或ISO格式。建筑回到js的那一刻 Date(),它在所有浏览器和版本中都不可靠。不 不鼓励使用RFC2822/ISO日期格式,并将在 即将发布的主要版本。请参阅 更多信息。 参数:[0]\u IsamentintObject:true、\u isUTC:false、\u useUTC:false、, _l:未定义,_i:2007年4月10日,晚上10:00:00,_f:未定义,_strict:未定义,_locale:[对象]

我已经查看了警告中链接的文档页面,但是我仍然不清楚我需要做哪些更改来消除弃用警告。例如,我尝试添加一个空数组作为第二个参数:

moment(value, []).add(6, 'hours').format("MM/DD/YYYY");
…但尽管这样可以消除错误,但我会在视图中打印“无效日期”,而不是实际日期。我需要如何调整这里的语法以消除警告

更新:提供的值是使用角度日期管道转换的UTC值。因此,我将通过两个管道:首先是角度日期管道,然后是使用力矩的自定义管道。完整管道代码如下所示:

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" /> 
在我看来,我使用的两条管道如下:

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" /> 

您的错误消息中有一个链接。它间接地将您引导到以下方面:

引用

不推荐使用非iso字符串进行力矩构造。这意味着你可以安全地做

力矩(“2014-04-25T01:32:21.196Z”);//iso字符串,utc时区

力矩(“2014-04-25T01:32:21.196+0600”);//带时区的iso字符串

力矩(“2014年4月25日”,“年-月-日”);//带格式的字符串

但您不能可靠地完成(因此它被弃用)

时刻(“2014/04/25”)

时刻(“2014年4月24日星期四12:32:21 GMT-0700(PDT)”

矩(“一些看起来像日期的随机字符串”)

基本上,为您的
时区syncippe
提供值的任何东西都不能很好地确保日期是
ISO
RFC2822
格式

更具体地说

'mediumDate'
参数相当于
'MMM d,y'
(例如
2015年6月15日
),它甚至不接近ISO

修复

尝试使用类似于
“client.dob | date:'yyyyy-MM-ddTHH:MM:ss.sssZ'| timeZoneSync”

树后森林

@乔尔沙普说得很对!我的回答解释了你看到错误的“原因”。但是乔恩问了一个更好的问题。为什么要继续翻译日期

示例

const parsedDate = moment("1981-09-24T05:00:00.000Z");
console.log(parsedDate.format("YYYY/MM/DD"));


看起来您提供给moment的日期
不是ISO或RFC2822格式。什么是
?你能和我分享一下吗,似乎这就是问题所在,到底是什么让你感到惊讶<代码>日期:'medium'不生成任何所需格式。你为什么还要用它;为什么要将日期格式化为字符串,然后再将其解析为日期,然后再将其格式化为字符串?@jonsharpe回答你的问题,我希望日期的格式对读者友好。因此,日期管道采用1981-09-24T05:00:00.000Z,并提供了一种用户友好的格式。但是,我用moment向日期添加小时数来解决时区同步问题。“解决时区同步问题”-现在这看起来像是一个问题,因为仅仅添加固定偏移量并不是处理本地化日期时间的方法。公认的答案并不能解决这个问题;调查。是的,看到有人显然忽略了他们发布的错误消息,而没有思考他们编写的代码的实际用途,这是令人恼火的;如果没有别的,因为这正是你应该做的,作为创造一个世界的一部分。同样,我的实际用户名也会自动完成。它很好地完成了OP所要求的内容,而不是这两种格式中的任何一种。我希望日期以读者友好的格式显示。因此,日期管道采用1981-09-24T05:00:00.000Z,并提供了一种用户友好的格式来显示在视图中。但随后我使用moment将时间添加到日期,以解决时区同步问题。@Ademo您可能希望按照不同的顺序执行操作:
client.dob | timeZoneSync | date:'medium'
,即:首先,更正
日期
;第二,把它翻译成字符串。事实上,您可以在
时区同步管道中丢弃
.format(“MM/DD/YYYY”)
。谢谢,我也有同样的想法。现在正在更改订单。不,与示例中提供的日期一致。根据我对这段代码的解释,至少我认为事情应该是这样的