jQuery.datepicker.formatDate和时区偏移

4
为了处理日期,我在我的应用程序中使用了jQuery UI的一个公共方法:jQuery.datepicker.formatDate。请参见以下参数和源代码:https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js
但是,有时根据计算机时区显示错误的日期。
演示在这里:http://jsfiddle.net/7ACdB/
在Windows上使用UTC+1(巴黎)时区,我得到了以下结果:
03/30/20
03/30/20

在 Windows 中设置 UTC-6(美国和加拿大)时区后,我得到了以下结果:
03/29/20 <- meh!
03/30/20

你需要在更改操作系统时区后重新启动浏览器(至少对于Google Chrome)。我的问题是“03/29/20”日期,如你所想。可以有人向我解释这是否正常或是jQuery UI的问题吗?我开始认为在美国时区中看到“Mon Mar 30 2020 00:00:00 GMT+0200(罗曼蒂克夏令时间)”作为03/29/20是正常的,但我不太确定。:-/
1个回答

5
你所得到的是正确的。你的示例将巴黎的时间设置为午夜。对于我所在的东部时区,巴黎的午夜是美国当地时间前一天的下午6点。
你的第一个时间:GMT+0200 是巴黎。
你的第二个时间:GMT-0500 是芝加哥(请注意,目前是夏令时)。
因此,当你将时区更改为美国时(使用我们的6个时区之一),输出结果就是在巴黎那个时间时,在美国的时间是多少。
这里有一个更新的Fiddle,将时间设置为巴黎时间上午6点:http://jsfiddle.net/jensbits/7ACdB/1/

Re,感谢您的回答。随着我对时区的理解加深,我得出了同样的结论。我的问题实际上更为复杂:每次发生模糊事件时,日期都会减少1天。当该事件发生时,我使用jQuery.datepicker.parseDate和jQuery.datepicker.formatDate方法,这些方法在本地时间中工作。但是,然后我保存了由parseDate返回的日期对象...我设法通过在正确的位置使用setUTCFullYear和new Date(dateV.getUTCFullYear(),dateV.getUTCMonth(),dateV.getUTCDate())来解决这个问题。 - TiTi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接