如何在Angular中使用DatePipe管理时区?

时间:2018-12-09 01:06:50

标签: javascript angular typescript pipe

考虑一个 MySQL数据库 ,以 YYYY-MM-DD HH:MI的标准 SQL TIMESTAMP 格式发送时间戳: SS

  

在这里, 2019-09-08 08:00:00

现在,我需要将其显示在我的Angular网站上,以根据打开网站的时区来处理时间戳。

Angular文档https://angular.io/api/common/DatePipe

中提到的管道
{{event.event_start_ts | date:'EEEE, MMMM d, y, h:mm:ss a zzzz'}}

2019年9月8日,星期日,格林尼治标准时间+05:30 时给出错误的输出(因为它会自动考虑将时区添加到提供的时间中)。我需要将此 +05:30 添加到 2019年9月8日,上午8:00:00 。此外,我不想显示 GMT + 05:30

我也很清楚,可以使用 moments.js 或仅使用纯javascript 或某种自定义管道来解决此问题。但是,我想知道是否有一个我不知道的管道滴答声。

2 个答案:

答案 0 :(得分:3)

我想您希望您的时间以UTC为准,然后添加用户的时区。 如果用户拥有2019-09-08 08:00:00,则前端数据库中的时间September 8, 2019, 1:30:00 PM应显示为GMT+05:30

经历this时,如果没有第3方库或编写混乱的代码,您似乎无法在前端获得所需的结果。如果您不想使用这些库,则需要调整后端以包括时区。

要删除GMT+05:30Sunday部分,只需放下zzzzEEEE

   {{event.event_start_ts | date:'MMMM d, y, h:mm:ss a'}}

答案 1 :(得分:-1)

因此,正如每个人的建议一样,我已经按照以下步骤将要求归档了。

步骤1:将MySQL时区设置为存储绝对时间

SET GLOBAL time_zone = '+00:00'; 
SELECT @@global.time_zone, @@session.time_zone;

步骤2:将MySQL连接时区设置为“ +00:00”。 (对我来说是 npm mysql )示例响应日期formate现在是 2019-09-08T03:00:00.000Z

{
    host: "*******",
    user: "*****",
    password: "****",
    database: "****",
    timezone:"+00:00"
}

第3步:让Angular发挥其魔力,格式不会影响该值。

固定时区

{{event.event_start_ts | date:'EEEE, MMMM d, y, h:mm:ss a zzzz':'GMT+05:30' }}

适用的时区

{{event.event_start_ts | date:'EEEE, MMMM d, y, h:mm:ss a zzzz'}}

感谢所有人。