假设您网站的用户选择了天数和帐户时区:
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()
并根据这个日期我执行该功能,如果我们需要重新计算时区,我们只需要几天/几次并使用相同的东西。
我已经读过这种方式可能无法调整到白天节省时间而且错误。帮助
答案 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开始,然后点击指向其他帖子的链接。