获取月份的第一天将仅在alert()上返回正确的日期

Mar*_*ner 4 javascript timezone date console.log

大家好,当我尝试获取每月的第一天,并试图提醒第一天时,我很困惑,它向我显示以下消息:

Sun Sep 01 2019 00:00:00 GMT+0100 (BST) 但是在console.log()这样 2019-08-31T23:00:00.000Z

这是我的代码,我试图了解如何正确获取每月的第一天

var dateD = new Date(), y = dateD.getFullYear(), m = dateD.getMonth();
var firstDay = new Date(y, m, 1);

alert(firstDay) // Sun Sep 01 2019 00:00:00 GMT+0100 (BST)
console.log(firstDay) // 2019-08-31T23:00:00.000Z
Run Code Online (Sandbox Code Playgroud)

Nin*_*rry 6

您在警报中看到的是当地时区的时间。您当地的时区是BST(英国夏令时)。

您在控制台中看到的是与UTC相同的日期/时间。您可以看到它是因为字符串中的Z。Z表示这是UTC。

因此,两个字符串实际上代表相同的日期/时间,只是在不同的时区中。并且它们确实代表了您当地时区(BST)中每月的第一天。


使用时console.log(firstDay),Date对象firstDay将发送到控制台。在控制台中显示值的环境将选择如何显示值。您的环境似乎选择使用firstDay.toISOString()firstDay.toJSON()在控制台中显示值。

如果要强制在控制台中看到与用户看到的相同的值,请在将Date对象传递给字符串之前将其转换为字符串,console.log如下所示:

console.log("" + firstDay); // Force string conversion before logging
Run Code Online (Sandbox Code Playgroud)

在StackOverflow上将其作为嵌入式代码段执行时,我可以看到不同之处:

console.log("" + firstDay); // Force string conversion before logging
Run Code Online (Sandbox Code Playgroud)