52

我可以像这样打印的每个对象中都有一个日期值:

<td> {{competition.compStart }}</td>

这是它的外观:

1931-05-31T00:00:00.000+0000

为了更改格式以使其更具可读性,我使用了 Angular 日期管道:

<td> {{competition.compStart | date : "dd/MM/yyyy"}}</td>

有了这个结果:

30/05/1931

如您所见,它显示的是前一天(5 月 30 日而不是 5 月 31 日)。

据我了解,问题与时区有关,因为我在阿根廷并且我们有 GMT-3,那么第 31 次减 3 小时的 00:00 将是 5 月 30 日晚上 9 点。

那么我怎样才能让它从字面上花时间而不是根据时区处理它,但仍然在管道中应用格式?

4

5 回答 5

41

在幕后,DatePipe使用语言环境在用户的时区显示日期。尝试使用客户的时区数据:

1931-05-31T00:00:00.000-0300而不是1931-05-31T00:00:00.000+0000.

您可以在几分钟内使用(new Date()).getTimezoneOffset()

这实际上是DatePipe. 社区意识到了这一点。将来,您将能够将时区指定为参数之一 ( {{ value | date:format:zone }})。

这是github上的问题:https ://github.com/angular/angular/issues/9324

对于更高级的日期操作,我建议moment.js(更少的麻烦,更好的一致性,更少的测试,更简单的维护)。

编辑:已添加:

date_expression | date[:format[:timezone[:locale]]]

代码:https ://github.com/angular/angular/blob/5.0.4/packages/common/src/pipes/date_pipe.ts#L137 文档:https ://angular.io/api/common/DatePipe

于 2017-07-15T23:03:04.873 回答
9

对于角度 5 及以上,您可以尝试在管道中添加时区,

默认情况下,它采用用户机器的本地时区

您可以在几分钟内指定它,例如 GMT-2, timezone: '-120'

{{ competition.compStart | date: 'short' : '-120'}}
于 2018-11-28T15:34:01.110 回答
1

我在我的项目中使用了 Date pipewith ,如下所示。offset

我分担了对谁的关心。

在组件中

this.offset = new Date().getTimezoneOffset();

在 HTML 文件中

<div>{{deviceInfo?.updatedAt | date: 'dd/MM/yyyy hh:mm:ss' : 'offset'}}</div>
于 2021-05-27T23:51:09.117 回答
1

我也面临同样的问题。在保存数据之前,将日期格式转换为服务中使用的格式。例如,在我的 Java 中,它是“YYYY-MM-DD”。所以在保存所有数据之前的角度:其中生日绑定到您的模板字段或简单地显示。

this.birthdate=this.datePipe.transform(birthDate, 'yyyy-MM-dd'); 其中birthdate 不是日期对象,而是字符串日期。

现在,当您需要在 UI 上显示日期时,请使用:

                let dd = (new Date(data.birthDate)).getUTCDate().toString();

                let mm = ((new Date(data.birthDate)).getMonth()).toString();
                let yy = (new Date(data.birthDate)).getFullYear().toString();

                this.birthDate = new Date(Number(yy), Number(mm), Number(dd));
于 2019-10-15T14:27:18.803 回答
0

html 文件中,如下:

{{ value | date:'yyyy-MM-dd hh:mm:ss a':'UTC+offset'}}

ts 文件中添加以下内容,

offset:number;
this.offset = (new Date().getTimezoneOffset());

可用于将 UTC 时间转换为系统时间(本地)

于 2021-10-19T11:06:34.220 回答