Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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 当下的夏令时_Javascript_Datetime_Momentjs - Fatal编程技术网

Javascript 当下的夏令时

Javascript 当下的夏令时,javascript,datetime,momentjs,Javascript,Datetime,Momentjs,我正在将选定的日期集发送到一天的开始(小时、分钟和秒设置为0),转换为UTC日期和从新日期()的偏移量。getTimezoneOffset()从我的客户端应用程序发送到我的服务器。在服务器中,我需要将UTC日期转换回原始日期以显示在报告中。但是,当我尝试将UTC日期转换回原始时区中的日期时,它会被关闭一个日期。我发现11月4日之前的日期就是这样,我相信这可能是因为夏令时 我正在服务器上使用带有矩(utcDate).utcOffset(offset).format('DD/MM/YYYY')的矩来

我正在将选定的日期集发送到一天的开始(小时、分钟和秒设置为0),转换为UTC日期和从
新日期()的偏移量。getTimezoneOffset()
从我的客户端应用程序发送到我的服务器。在服务器中,我需要将UTC日期转换回原始日期以显示在报告中。但是,当我尝试将UTC日期转换回原始时区中的日期时,它会被关闭一个日期。我发现11月4日之前的日期就是这样,我相信这可能是因为夏令时

我正在服务器上使用带有
矩(utcDate).utcOffset(offset).format('DD/MM/YYYY')
的矩来尝试获取正确的日期

如果发送的日期是UTC格式的日期,即PST 2019年10月26日00:00,那么在服务器上,当它转换回时,我将获得2019年10月25日

客户发送的UTC日期为2019-11-01T07:00:00.000Z,发送的偏移量为480。
在服务器上,我尝试使用时刻('2019-11-01T07:00:00.000Z').utcOffset(-480).格式('DD/MM/YYYY hh:MM a')获取日期,并获得“2019年10月31日11:00 pm”如果客户端位于太平洋时区,
480
(UTC-8)是2019年11月1日的不正确偏移量。当天,DST生效,偏移量为UTC-7

问题不在于服务器端的解释,而在于如何在客户端收集时区偏移

new Date().getTimezoneOffset()
这将给出给定日期对象的有效偏移量<代码>新日期()提供当前日期和时间。2019年的DST于11月3日凌晨2点结束,因此,现在运行它时,您将得到一个不同于上一个日期有效的偏移量

您应该更改客户端代码以返回正确的偏移量:

new Date("2019-11-01T07:00:00.000Z").getTimezoneOffset()  // 420
(如果已有对象,请使用现有的
Date
对象。)


或者,您可以更改客户端代码,以返回以本地时间和偏移量(而不是UTC)表示的ISO字符串。例如,只需使用
日期
对象,或者只需使用
矩().format()

除此之外,如果将ISO字符串发送到服务器,则服务器需要解析并将其拆分为UTC和时区偏移量(因为数据库可能会将其转换为UTC,然后丢弃时区信息)。该计算也可能由客户端进行。只需确保不要仅将ISO字符串存储到数据库中,因为您还希望存储时区信息。偏移量以秒为单位(不是在几分钟内,因为由于Unix的时间戳,您通常会在几秒钟内执行更多的计算)这样存储起来会更好。