考虑一个 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 或某种自定义管道来解决此问题。但是,我想知道是否有一个我不知道的管道滴答声。
答案 0 :(得分:3)
我想您希望您的时间以UTC为准,然后添加用户的时区。
如果用户拥有2019-09-08 08:00:00
,则前端数据库中的时间September 8, 2019, 1:30:00 PM
应显示为GMT+05:30
。
经历this时,如果没有第3方库或编写混乱的代码,您似乎无法在前端获得所需的结果。如果您不想使用这些库,则需要调整后端以包括时区。
要删除GMT+05:30
和Sunday
部分,只需放下zzzz
和EEEE
{{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'}}
感谢所有人。