问题 10月20日某些年份的问题


我在Javascript中编写了一些没有任何问题的代码。 但是当我把日期 October 20, 2013,我被退回了约会 October 19, 2013

这同样适用于这些年份 20192024 和 2030 (未经测试 前几年而不是以后)。

在我测试的所有浏览器中出现此问题(谷歌浏览器IE浏览器火狐浏览器歌剧 和 苹果浏览器)。

我写的时候:

date = new Date("10/20/2013");
document.write(date);

我得到的结果是:

2013年10月19日星期六23:00:00 GMT-0300(BRT)


有人可以告诉我为什么会这样,我该如何解决这个问题?


12567
2018-05-22 18:07


起源

对于我来说最新的Chrome工作正常,10月20日的输出正如预期的那样? - > 小提琴 - adeneo
也许这是你的时区...... - Luigi Siri
这里也正常工作。 - eLRuLL
它是你的时区。 - Neeraj


答案:


2013年10月20日是BRST的转变。因此,如果您在巴西(在BRST时区),您将从BRT(UTC -3)过渡到BRST(UTC-2)。

TimeAndDate.com

圣保罗当前时间: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

14
2018-05-22 18:21



有关具有时间更改的日期的JS问题的更多信息 stackoverflow.com/questions/14839244/... - jwl
这解释了为什么只在某些年份,即日期是在星期天!好抓约翰。 - HBP
大!谷歌浏览器将您的日期恢复为1小时,但Safari保留更改为BRST。 - orafaelreis


使用Date.parse时,某些浏览器可能会显示不正确的值(与'new Date(string)'相同)。我不知道原因,但创建日期的最佳方法是使用 日期(年,月,日)构造函数

例:

console.log(new Date(2013, 10, 20))

0
2018-05-22 18:16



这似乎不是原因...... - John Dvorak
是的,这不是。 John Koerner的解释是正确的。 - André Mazoni