[英]Creating a Date object in a specific time zone
我需要将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
对象,以正确表示传入的字符串并遵守时区信息?
如何创建一个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和根据主机系统转换为“本地”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.