Javascript错误/不同日期时间是从UTC转换的日期中提取的



我有一个本地格式的日期,我把它改成了UTC格式。UTC之后,我想提取UTC中的日期和时间。但每当我试图提取时间或日期时,它只考虑当地时间,为什么?

this.utcDate = this.datePipe.transform(this.onceDate,'medium');
console.log('+=timezonenene=+', this.utcDate);
this.utcDateStr = new Date(this.utcDate).toUTCString();
console.log('++ date is ++', this.utcDateStr);
this.utcDateStr = new Date(this.utcDateStr).toISOString();
console.log('++ date is ++', this.utcDateStr);
this.showDate = this.datePipe.transform(this.utcDateStr, 'yyyy-MM-dd');
this.showTime = this.datePipe.transform(this.utcDateStr, 'HH:mm');
console.log('+=time date zonenene date str =+', this.showDate);
console.log('+=timezonenene date str=+', this.showTime);

输出:

+=timezonenene=+ Apr 7, 2020, 5:41:16 PM
++ date is ++ Tue, 07 Apr 2020 12:11:16 GMT
++ date is ++ 2020-04-07T12:11:16.000Z
+=time date zonenene date str =+ 2020-04-07
+=timezonenene date str=+ 17:41

我希望最后记录的时间为:12:11而不是17:41

您的问题似乎是关于Angular DatePipe的(尽管您直接调用transform函数(。

来自关于timezone参数的文档:

如果未提供,则使用最终用户的本地系统时区。

因此,为了获得UTC输出,您可以更改代码,在每次调用datePipe.transform时,在format参数之后提供时区参数'UTC'

此外,我还想重新考虑一下为什么生成字符串只是为了再次解析它们。通常这是不必要的,并且可能导致错误。如果this.onceDateDate对象,那么您应该能够在整个代码中使用它,而不是创建this.utcDateStr只是为了再次解析和转换它。(尽管很难从你的代码中判断是否是这样。将来,请提供一个最小的、可复制的例子。(

最新更新