我需要将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)
。
我试图以各种方式操纵这个日期,包括:
.toDate()
。这会丢弃所有时区信息,并将我们带回原点。date.getTime()
和date.getTimezoneOffset()
的变体来计算自所选时区的纪元以来的毫秒数。这也无法按预期工作。Date
对象错误地解释时间。如何创建一个Javascript Date
对象,该对象正确表示传入的字符串并尊重时区信息?
答案 0 :(得分:0)
如何创建一个Javascript Date对象,该对象正确表示传入的字符串并尊重时区信息?
“尊重时区信息”是什么意思?如果你的意思是“继续使用-05:00的偏移量”,那么这是相当简单的:解析字符串,存储偏移量并在从日期创建时间戳时使用它。
但是,如果您还想观察夏令时的变化,那么您将面临更大的挑战。假设“CDT”是“中央日光(节约)时间”,那么使用它的一些地方位于赤道以北(例如美国的地方),有些地方位于赤道以南,例如。
Place CDT starts CDT ends
Tabasco, Mexico: 2 Apr 2017 29 Oct 2017
Chicago, USA: 12 Mar 2017 5 Nov 2017
Easter Is, Chile: 12 Aug 2017 12 May 2018 <-- Southern hemisphere
正如您所看到的,仅仅因为某个地方使用CDT并不意味着您可以确定它何时从CDT变为CST。
以上是使用IANA时区数据库位置标识符的常见原因(请参阅Wikipedia)。它允许用户根据位置而不是特定时区指定特定偏移和规则。
除非您能将“CDT -05:00”解析为“America / Chicago”或“Chile / EasterIsland”,否则您可以为所有时间戳保留“CDT -05:00”,使用UTC,或者使用UTC并根据主机系统转换为“本地”。