将JS日期+时间转换为不同的时区

时间:2015-09-02 11:27:21

标签: javascript date timezone momentjs

假设您网站的用户选择了天数和帐户时区:

2015-09-02 14:15:00 
2015-09-02 15:30:00
2015-09-03 17:10:00

时区:" America/Los_Angeles"

您可以在服务器上发送并保留此信息,服务器应在用户需要的当地时间执行A功能。稍后用户可以将他的时区更改为"Europe/Stockholm",我们会按此时区重新调整日期。

从客户端到服务器的流程应该如何?我的行为是什么?互联网上有很多错误和错误信息,我真的需要一些可靠的建议。

以下是我提出的建议:

我将这个javascript对象保存到数据库中 moment.tz("2015-09-02 14:15:00", "America/Los_Angeles").toDate()

并根据这个日期我执行该功能,如果我们需要重新计算时区,我们只需要几天/几次并使用相同的东西。

我已经读过这种方式可能无法调整到白天节省时间而且错误。帮助

1 个答案:

答案 0 :(得分:1)

我会通过将您的问题解析到相关部分来回答这个问题。

  

...服务器应该在用户需要的当地时间执行A函数。

好的,所以我假设您正在安排将来运行的事件。这很重要,因为如果您正在记录已经发生的事件的时间戳,那么该方法将完全不同。

  

......稍后用户可以将他的时区更改为" Europe / Stockholm"我们按此时区重新调整日期。

您不应该调整事件的日期。将时区与事件相关联,而不是与用户相关联。您也可以拥有每个用户的时区,并且您可以在显示时调整该时区 - 但您应该单独保留原始事件时间和时区,除非用户直接编辑它。 (注意,我在这里对你的项目内部做了几个假设,但这是最好的一般建议)。

  

我将此javascript对象保存到数据库moment.tz("2015-09-02 14:15:00", "America/Los_Angeles").toDate()

JS Date对象表示即时,但使用运行代码的本地时区进行投影。因此,只要您拨打toDate,就会撤消使用时刻时区进行的任何时区调整。你应该避免打电话给toDate。相反,请使用时刻的函数,例如format,它可以保留时区偏移量。

  

我已经读过这种方式可能无法调整为夏令时并且错误。

不确定您在哪里阅读,但这不正确。 Date对象和moment对象(无论是否使用时刻时区)都可以正确计算DST。

您可能还希望查看我之前关于安排未来事件的其他一些答案。从this one开始,然后点击指向其他帖子的链接。