我在Javascript中编写了一些没有任何问题的代码。
但是,当我提交日期October 20, 2013
时,我返回了日期October 19, 2013
。
这同样适用于2019
,2024
和2030
年(未经测试
前几年而不是后来)。
在我测试的所有浏览器中出现此问题( Google Chrome , Internet Explorer , Mozilla Firefox , Opera 和< I> Safari浏览器的)。
当我写:
date = new Date("10/20/2013");
document.write(date);
我得到的结果是:
2013年10月19日星期六23:00:00 GMT-0300(BRT)
有人可以告诉我为什么会这样,我该如何解决这个问题?
答案 0 :(得分:14)
2013年10月20日是BRST的转变。因此,如果您在巴西(在BRST时区),您将从BRT(UTC -3)过渡到BRST(UTC-2)。
圣保罗当前时间:2013年5月22日星期三下午3:19:14 BRT
圣保罗将继续留在BRT,直到2013年10月20日星期日为止 BRST
过渡发生在午夜和午夜到凌晨1点被跳过。为了保证该日期的时间,您可以尝试:
date = new Date("10/20/2013 01:00:00");
你应该得到10/20/2013 01:00:00
BRST作为时区名称。
对于参与DST的美国时区某位想要查看此问题的人;使用2013年3月10日的美国夏令时转换点,其中凌晨2点被跳到凌晨3点:
var d = new Date("03/10/2013 02:59:59")
alert(d); // Returns 1:59:59 AM in the Standard Time Zone
var d = new Date("03/10/2013 03:00:00")
alert(d); // Returns 3:00:00 AM in the Daylight Time Zone
答案 1 :(得分:0)
使用Date.parse时,某些浏览器可能会显示不正确的值(与'new Date(string)'相同)。我不知道原因,但创建日期的最佳方法是使用 Date(year, month, day) constructor
示例:
console.log(new Date(2013, 10, 20))