1

如果我尝试从 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)

然而,由于英国的夏令时(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)

我该如何处理这个问题,以便我总是在每月 1 日得到 00:00:00,而不管夏令时(以及世界上任何地方的用户的任何其他时钟调整)?

4

3 回答 3

4

你是在找getDay方法,不是为了getDate。无论时区和 DST 如何,这两种方法都始终适用于本地时间。

然而,.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
于 2013-10-09T09:33:13.427 回答
2

用于new Date(Date.UTC(year, month, day [, hour, minute, second, millisecond]))从特定 UTC 时间创建 Date 对象。

var d = new Date(Date.UTC(2013, 9, 1));
d.toISOstring(); //'2013-10-01T00:00:00.000Z'
d.toString(); //'Fri Nov 01 2013 02:00:00 GMT+0200 (EET)'
于 2013-10-09T09:44:17.527 回答
0

在这种情况下,请尝试将其设置为 10 月 1 日凌晨 1 点或其他时间:(取决于您切换时间的多少)

===== 编辑 1 ======

javascript .setDate(1) 函数是否正常运行?很抱歉,我想我无法在我的时区测试你的情况

于 2013-10-09T09:11:51.517 回答