Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将JS日期+时间转换为不同的时区_Javascript_Date_Timezone_Momentjs - Fatal编程技术网

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

Javascript 将JS日期+时间转换为不同的时区,javascript,date,timezone,momentjs,Javascript,Date,Timezone,Momentjs,假设您网站的用户选择天时间和帐户时区: 2015-09-02 14:15:00 2015-09-02 15:30:00 2015-09-03 17:10:00 时区:美国/洛杉矶 您将此信息发送并保存在服务器上,服务器应在用户需要的本地时间执行功能。稍后,用户可以将其时区更改为欧洲/斯德哥尔摩,我们将根据该时区重新调整日期 从客户端到服务器的流应该是什么样子?我的行动是什么?网上有很多错误和错误的信息,我真的需要一些可靠的建议 以下是我的想法: 我将这个javascript对象保存到数据库中

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

2015-09-02 14:15:00 
2015-09-02 15:30:00
2015-09-03 17:10:00
时区:美国/洛杉矶

您将此信息发送并保存在服务器上,服务器应在用户需要的本地时间执行功能。稍后,用户可以将其时区更改为欧洲/斯德哥尔摩,我们将根据该时区重新调整日期

从客户端到服务器的流应该是什么样子?我的行动是什么?网上有很多错误和错误的信息,我真的需要一些可靠的建议

以下是我的想法:

我将这个javascript对象保存到数据库中 moment.tz2015-09-02 14:15:00,美国/洛杉矶,今日

根据这个日期,我执行这个函数,如果我们需要重新计算时区,我们只需要几天/几次,然后使用相同的东西


我曾读到,这种方式可能无法适应日光节约时间,这是错误的。帮助?

我将通过将您的问题分解为相关部分来回答这个问题

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

好的,我假设您正在计划将来运行的事件。这一点很重要,因为如果您正在为已经发生的事件记录时间戳,则方法将完全不同

。。。稍后,用户可以将其时区更改为欧洲/斯德哥尔摩,我们将根据该时区重新调整日期

您不应调整活动的日期。将时区与事件关联,而不是与用户关联。您还可以具有每个用户的时区,并且可以在显示时针对该时区进行调整-但是您应该保留原始事件时间和时区,除非用户直接编辑它。注意,我在这里对您的项目内部进行了一些假设,但这是最好的一般建议

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

JS Date对象表示时间上的一个瞬间,但它使用代码运行所在的本地时区进行投影。因此,您对矩时区所做的任何时区调整都将在您调用toDate时立即撤消。你应该避免给toDate打电话。相反,使用矩的函数,例如format,它可以保留时区偏移

我曾读到,这种方式可能无法适应夏令时,这是错误的

不知道你在哪里读到的,但那是不正确的。日期对象和时刻对象(无论是否使用时刻时区)都可以正确地解释DST


你可能还想回顾一下我写的关于安排未来活动的其他一些答案。从开始,并跟随其他帖子的链接。

在momentjs中,你有一个功能来知道是否DST可以帮助你?@romuleald是的,我可以看到,但如果是/否,我真的不知道我能做什么。。。我对日期不太了解,它很复杂。如果它回来,你再加一个小时true@romuleald-这是没有必要的,而且实际上会让事情变得更糟。您不应该需要手动操纵时间。@MattJohnson浏览器会自动操作时间,对吗?谢谢您给出了一个非常好的答案,所以很高兴知道toDate如何将其作为日期对象保存到数据库中?我需要为正在使用的队列处理器作业指定一个日期,以便它需要下一个事件发生,而不是所有未来事件。那么你知道我如何使用矩时区转换一个真正的js日期对象,我可以保存到数据库中吗?或者我唯一的方法是让队列工作者使用时刻时区日期?但这似乎仍然很复杂。我不知道队列工作人员是如何截获日期的。以及何时真正运行作业。对不起,我必须了解更多有关您的体系结构的信息才能回答这个问题。但一般来说,日期对象不存储在数据库中,只存储它们的值。特定的数据访问API可以以某种形式期望对象,但是它仍然可以读取并序列化该对象,然后将其写入数据库所期望的形式。还可以考虑数据访问机制可能会查看日期对象的本地值,但它可以很好地替代UTC等效值,例如.getTime或.valueOf的时间戳结果,或.toISOString或.toutString的字符串结果。如果它存储UTC时间,那么你就可以开始了——因为它反映的是你希望作业运行的同一时间。太棒了,谢谢你,现在它肯定能理解了。我想我现在可以想办法处理了,非常感谢!