我有返回对象集合的休息服务,其中一个项目的字段是日期字符串(ISO-8601 格式)和日期值如下
“创建日期”:“2017-02-21T12:56:50.907”,
在 angular4 UI 中,我将 DatePipe 用于格式化上述日期
{{resultItem.createdDate| date:'short'}}
我得到错误的转换如下
2017 年 2 月 21 日上午 7:56
代替
2017 年 2 月 21 日,上午 0:56
我通过添加自定义管道解决了这个问题。
我的自定义管道基于 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;
}
}
而且我还使用默认日期管道来格式化
{{createdDate | utcDate | date:'short'}}
您可以将另一个参数传递给日期管道,如下所示:
{{resultItem.createdDate | 日期:'短':'UTC'}}
这个参数可以是一个时区,'-0430'
或者只是'GMT'
您可能需要根据您的时区日期创建一个 UTC 日期...我假设您在太平洋时区,因为时间距 UTC 7 小时...
尝试此代码以获取没有时区的新日期对象(假设您的变量名为“日期”):
var datewithouttimezone = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
使用这些:
在您的组件中:
import * as moment from 'moment';
在html页面中
{{resultItem.createdDate | date : 'MM/dd/yyyy HH:mm': 'UTC' }}
我在这种情况下使用了 moment.js。它对我有用。角度版本为 8
import { Pipe, PipeTransform } from '@angular/core';
import * as moment from 'moment';
@Pipe({
name: 'utcDate'
})
export class UtcDatePipe implements PipeTransform {
transform(value: string): any {
if (!value) {
return '';
}
const dateWithNoTimezone = new Date(moment.utc(value).format());
return dateWithNoTimezone;
}
}
HTML:
<small class="text-muted ml-auto">{{n.createdAt | utcDate | date :'dd/MM/yyyy h:mm a '}}</small>
将以下代码添加到 html 文件中,
{{ value | date:'short':'UTC+offset'}}
在 component.ts 文件中获取 offset 的值,
this.offset = (new Date().getTimezoneOffset());
它将UTC时间转换为本地时间。