6

使用 JavaScript date.getMonth() 和 date.getUTCMonth() 时,我发现结果不一致,但仅限于某些日期。以下示例演示了该问题:

<!DOCTYPE html>
<html>
<body onload="myFunction()">

<p id="demo">Click the button to display the month</p>

<script type="text/javascript">
function myFunction()
{
var d = new Date(2012, 8, 1);
var x = document.getElementById("demo");
x.innerHTML=d;
x.innerHTML+='<br/>result: ' + d.getMonth();
x.innerHTML+='<br/>result UTC: ' + d.getUTCMonth();

}
</script>

</body>
</html>

这个例子的输出是:

Sat Sep 01 2012 00:00:00 GMT+0100 (Hora de Verão de GMT)
result: 8
result UTC: 7

如果我将日期更改为 (2012, 2, 1),则输出为:

Thu Mar 01 2012 00:00:00 GMT+0000 (Hora padrão de GMT)
result: 2
result UTC: 2

在第一个示例中,getMonth 返回 7,getUTCMonth 返回 8。在第二个示例中,两者都返回相同的值 2。

有没有人已经经历过这种情况?我来自葡萄牙,我认为这与我的格林尼治标准时间有关,但我不明白为什么会发生这种情况,因为这些示例是在相同的情况下运行的。

提前感谢

4

3 回答 3

1

通用时区日期方法用于处理 UTC 日期

日期返回 0 到 11 之间的月份新日期(1976 年 1 月 1 日 18 日) - 1976 年 2 月 18 日星期三 00:00:00 GMT+0530(印度标准时间)

*getUTCDate 返回与 getDate() 相同,但返回基于世界时区的日期,与月份和年份相同

新日期(1976, 01, 18).getUTCDate() - 17

新日期(1976, 01, 18).getDate() - 18

新日期(1976, 02, 18).getUTCMonth() - 2

新日期(1976, 01, 18).getMonth() - 1

新日期(1976, 01, 18).getYear() - 76

新日期(1976, 01, 18).getUTCFullYear() - 1976

新日期(1976, 01, 18).getFullYear() - 1976

于 2020-06-10T06:54:16.120 回答
0

你会发现它是由 DST 差异引起的。

于 2012-08-07T13:55:46.913 回答
0

您会看到,根据您的 TIMEZONE,控制台日志可能会有所不同。我选择了当月的第一天'01',因为它将被赋予午夜默认时间'00:00:00',这将导致某些时区产生二月而不是三月(你可以在这里获得完整的独家新闻:https:/ /developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse):

let date1 = '2019-03-01'; // defaults to UTC
let date2 = '2019-03-01T14:48:00'; // LOCAL date/time


let dt1 = new Date(date1);
let dt2 = new Date(date2)


let month1 = dt1.getMonth();
let month2 = dt2.getMonth();

console.log("mon1: " + month1);
console.log("mon2: " + month2);
于 2021-10-17T14:40:49.580 回答