【发布时间】:2017-09-21 20:36:16
【问题描述】:
我需要将 Javascript Date 对象传递给 Angular 模型,以便它可以在日期/时间选择器中向用户显示日期和时间。
数据以下列格式存储在数据库中:
date: Sat, 23 Sep 2017 21:00:00 CDT -05:00,
这个数据被传递到一个 Angular 指令中,我需要在其中创建一个代表它的 Date 对象。问题是,每当实例化 new Date() 时,它总是使用用户机器的时区。例如,如果用户机器在旧金山,上述日期对象将显示Sat Sep 23 2017 19:00:00 GMT-0700 (PDT)。
我试图以多种方式操纵这个日期,包括:
- 使用 moment.js 进行时区操作,然后在结果时刻调用
.toDate()。这会丢弃所有时区信息,让我们回到第一方。 - 使用
date.getTime()和date.getTimezoneOffset()的变化来计算所选时区自纪元以来的适当毫秒数。这也无法按预期工作。 - 完全剥离字符串的时区信息。这会导致
Date对象错误地解释时间。
如何创建正确表示传入的字符串并尊重时区信息的 Javascript Date 对象?
【问题讨论】:
-
@JayLane 不幸的是没有。选择的答案建议在整个应用程序中转换为 UTC 时间,虽然这是一个很好的建议,但我们目前不能这样做。第二个建议实际上与我在第 2 项中提到的相同。
-
你试过moment的时区库了吗?不确定它是否也在 moment.js 中耦合。momentjs.com/timezone
-
@JayLane 是的,我提到我在第 1 项中尝试了时刻。时区操作可以立即完成,但是一旦时刻通过时刻
.toDate()函数转换为 JSDate对象,它丢失其时区信息。 -
Date 对象没有时区,它们始终是 UTC。但是,您可以调整输出以表示任何特定时区的日期和时间。
标签: javascript angularjs date