在尝试拉取一个月的第一天时,如何处理夏令时

How can I handle daylight savings time when trying to pull the first day of a month?

本文关键字:夏令时 天时 一天 何处理 处理 一个      更新时间:2023-09-26

如果我尝试从 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,无论夏令时如何(以及用户在世界任何地方的任何其他时钟调整(?

您正在寻找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

使用 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)'

在这种情况下,请尝试将其设置为 10 月 1 日凌晨 1 点或其他内容:(取决于您

的时间(

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

JavaScript .setDate(1( 函数的行为是否正常?很抱歉,我认为我无法在我的时区测试您的情况