获取一个月的第一天将 return 仅在 alert() 上更正日期

Get first day of the month will return correct date only on alert()

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

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

试试这个

var date = new Date();
var first = new Date(date.getFullYear(), date.getMonth(), 1);
var last = new Date(date.getFullYear(), date.getMonth() + 1, 0);

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

您在控制台中看到的是相同的 UTC 日期/时间。由于字符串中的 Z,您可以看到这一点。 Z 表示这是 UTC。

所以,两个字符串实际上代表相同的 date/time,只是在不同的时区。它们确实代表您当地时区 (BST) 中月份的第一天。


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

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

console.log("" + firstDay); // Force string conversion before logging

我可以看到在 Whosebug 上将其作为嵌入式代码片段执行时的区别:

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

alert(firstDay) 
console.log("Date object passed directly to log: ", firstDay)
console.log("Date object converted to string: " + firstDay)