Angular 4 Date Pipe错误转换

Jo *_*aul 13 date-pipe angular

我有休息服务,它返回一个对象集合,其中一个字段是日期字符串(ISO-8601格式),日期值如下

"createdDate":"2017-02-21T12:56:50.907",

在angular4 UI中,我将DatePipe格式化为上述日期

{{resultItem.createdDate | 日期: '短'}}

而且我的错误转换如下: 2017年2月21日,上午7:56

而不是2/21/ 2017,0:56 AM

Jo *_*aul 28

我通过添加自定义管道解决了这个问题.

我的自定义管道基于Birwin提供的解决方案.谢谢Birwin.

这是我的名为UtcDate的自定义管道

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'utcDate'
})
export class UtcDatePipe implements PipeTransform {

  transform(value: string): any {

    if (!value) {
      return '';
    }

    const dateValue = new Date(value);

    const dateWithNoTimezone = new Date(
      dateValue.getUTCFullYear(),
      dateValue.getUTCMonth(),
      dateValue.getUTCDate(),
      dateValue.getUTCHours(),
      dateValue.getUTCMinutes(),
      dateValue.getUTCSeconds()
    );

    return dateWithNoTimezone;
  }
}
Run Code Online (Sandbox Code Playgroud)

我还使用默认日期管道进行格式化

{{createdDate | utcDate | date:'short'}}
Run Code Online (Sandbox Code Playgroud)

  • 如果您是对此的读者,使用angular> = 5,则绝对应该检查Samuel Luis的答案。此答案适用于Angular 4及以下版本 (2认同)

小智 18

您可以将另一个参数传递给date管道,如下所示:

{{resultItem.createdDate | 日期:“短”:“ UTC”}}

此参数可以是类似'-0430'或只是一个时区'GMT'

请参阅文档:https : //docs.angularjs.org/api/ng/filter/date

  • 我相信这适用于角度5。 (6认同)
  • 即使它对angular4不起作用,这仍然是我对angular 7所需要的,并在这里找到了。谷歌有点影响投票,但我该怎么办... (2认同)

bir*_*win 10

您可能需要创建一个带有时区的日期的UTC日期...我假设您在太平洋时区,因为时间是UTC的7小时...

尝试使用此代码获取没有Timezone的新日期对象(假设您的变量名为"date"):

var datewithouttimezone = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),  date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
Run Code Online (Sandbox Code Playgroud)