javascript - JavaScript setMinutes() 在 DST 结束时表现错误
问题描述
当美国夏令时结束时,我们将时钟拨回 1 小时,这使得当天凌晨 1 点发生两次。然而,JavaScript 在第二个凌晨 1 小时(时钟切换后)的时间戳表现异常,并不断将它们恢复到 1 小时前的白天时间。这可以在尝试使用setMinutes
和setHours
方法时看到。
此代码将日期的分钟设置为其当前分钟值,并按预期运行(浏览器具America/Los_Angeles
有时区):
let date = new Date("2021-07-07T09:40:00.000Z");
console.log(date.toLocaleString("en-us", {timeZoneName: "short"}));
// "7/7/2021, 2:40:00 AM PDT"
date.setMinutes(date.getMinutes());
console.log(date.toLocaleString("en-us", {timeZoneName: "short"}));
// "7/7/2021, 2:40:00 AM PDT"
但是这段代码没有:
let date = new Date("2021-11-07T09:50:00.000Z"); // DST ended on Nov 7 at 2 AM
console.log(date.toLocaleString("en-us", {timeZoneName: "short"}));
// "11/7/2021, 1:50:00 AM PST"
date.setMinutes(date.getMinutes());
console.log(date.toLocaleString("en-us", {timeZoneName: "short"}));
// "11/7/2021, 1:50:00 AM PDT" <-- Wrong time zone
因此 Date 对象可以在第二个(标准时间)小时内正确打印时间戳,但在使用setMinutes()
.
这是预期的行为吗?date.setMinutes(date.getMinutes())
更改日期似乎很奇怪。
解决方案
推荐阅读
- php - 一个请求中带有 json 的 CakePHP REST API 多部分文件
- php - 将照片上传到服务器时,将文件上传到服务器未定义索引时出错
- javascript - Joomla!正在强制我的 concat 加 '+' 到 "%20"
- android - Android 库不适用于 Lib GDX 制作的项目
- flask - SQLAlchemy 不允许我在测试夹具中多次设置 Flask 应用程序
- macos - macOS en5 网络无法关闭
- reactjs - Apollo 客户端和更新表单
- php - Etsy PHP Oauth:无法获取访问令牌
- java - 在春季数据中使用什么代替 fetch.EAGER?
- html - 在 Bootstrap 中向面板标题添加特色角