当尝试提取一个月的第一天时,如何处理夏令时?

Jam*_*lly 1 javascript

如果我尝试提取 11 月的第一天数字,效果很好:

var d = new Date(2013, 10, 1);    // 1st of November 2013
d.toISOString();                  // 2013-11-01T00:00:00.000Z (November)
d.getDay();                      // 5 (Correct, 1st of November = Friday = 5)
Run Code Online (Sandbox Code Playgroud)

然而,由于英国的夏令时(时钟在 10 月底前进一小时),如果我尝试拉出 10 月的第一天,日期最终会设置为前一天的 23:00:

var d = new Date(2013, 9, 1);     // 1st of October 2013
d.toISOString();                  // 2013-09-30T23:00:00.000Z (September)
d.getDay();                      // 2 (Last day number of September)
Run Code Online (Sandbox Code Playgroud)

我该如何处理这个问题,以便无论夏令时如何(以及用户身在何处的任何其他时钟调整),我总是在每月 1 日得到 00:00:00?

Ber*_*rgi 5

你是在寻找getDay方法,而不是为了getDate。这两种方法始终适用于当地时间,无论时区和夏令时如何。

然而,.toISOString事实并非如此。它以 UTC 格式显示时间,并导致您感到困惑。使用该.toString函数也可以输出当地时间。

> new Date(2013, 9, 1).toISOString()
"2013-09-30T22:00:00.000Z" // my timezone's midnight in UTC
> new Date(2013, 9, 1).toString()
"Tue Oct 01 2013 00:00:00 GMT+0200" // midnight, with offset
> new Date(2013, 9, 1).getDate()
1 // the *first* day of October
> new Date(2013, 9, 1).getDay()
2 // is a Tuesday
Run Code Online (Sandbox Code Playgroud)