11

我用 Javascript 编写了一些可以正常工作的代码。但是当我输入日期时October 20, 2013,我被退回了日期October 19, 2013

这同样适用于年份20192024并且2030未在前几年进行测试,也未在以后测试)。

这个问题出现在我测试的所有浏览器(Google ChromeInternet ExplorerMozilla FirefoxOperaSafari)中。

当我写:

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

我得到的结果是:

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


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

4

2 回答 2

14

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
于 2013-05-22T18:21:34.720 回答
0

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

例子:

console.log(new Date(2013, 10, 20))
于 2013-05-22T18:16:15.477 回答