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

标签 javascript date timezone 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

最佳答案

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

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

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


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

如果您想要强制在控制台中看到与用户看到的相同的值,则将 Date 对象转换为字符串,然后再将其传递给 console.log 像这样:

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

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

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)

关于javascript - 获取月份的第一天将仅在 alert() 上返回正确的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58137637/

相关文章:

javascript - 在我的指令中获取 $last 和 $parent

javascript - 使用 JavaScript 使浏览器的缓存失效

php - 将日期选择器日期转换为 mysql 日期

javascript - 文本框中的日期,格式为 yyyy-mm-dd

iphone - 从调整时区的 NSDate 获取 NSDate

javascript - TypeError : document. getElementbyId 不是函数

asp.net - 使用 Microsoft js 扩展简单文本框控件时出现 Sys.ParameterCountException

.net - 获取自定义日期差异的函数

javascript - 如何在 ASP.net 应用程序中获取用户时区偏移并将其发送到服务器

python - 使用 time.strptime 格式在 Python 中解析日期和时间戳