带时区的角度日期管道无法正确转换

问题描述

我将一个 UTC 日期时间传递给 angular 应用程序,我想在不同的时区显示时间。这是 Postman 上返回的日期的样子:

"2021-07-21T09:15:00" - this is in UTC.

我想将其转换为不同的时区(在运行时确定),所以我尝试了以下类似的方法,但它始终显示相同的 UTC 值。

<ng-template kendoGridCellTemplate let-dataItem>
      {{ dataItem.returnedTime | date: 'hh:mm a' : 'IST' }}
    </ng-template>

我也尝试了以下方法

<ng-template kendoGridCellTemplate let-dataItem>
      {{ dataItem.returnedTime | date: 'shortTime' : 'IST' }}
    </ng-template>

 <ng-template kendoGridCellTemplate let-dataItem>
      {{ dataItem.returnedTime | date: 'hh:mm a' : '+530' }}
    </ng-template>

我希望它显示 2:45PM,而不是显示 9:15AM。

这是怎么回事?A

解决方法

如果该值是 UTC,它的末尾应该有一个 Z,如 "2021-07-21T09:15:00Z"

根据ECMAScript spec

...当 UTC 偏移量表示不存在时,仅日期形式被解释为 UTC 时间,日期时间形式被解释为本地时间

Z 附加到输入字符串,无论是在后端还是在您收到它时,它都应该可以正常工作。