繁体   English   中英

在特定时区中创建日期对象

[英]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)

我试图以多种方式操纵此日期,包括:

  1. 使用moment.js进行时区操纵,然后在结果时刻调用.toDate() 这会丢弃所有时区信息,并使我们回到第一个平方。
  2. 使用date.getTime()date.getTimezoneOffset()来计算从所选时区的纪元开始算起的毫秒数。 这也无法按预期工作。
  3. 完全剥离String的时区信息。 这导致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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM