javascript - 日期字符串转换浏览器与夏令时的区别
问题描述
我有 2 个问题。
1.关于浏览器中JavaScript的夏令时实现。
(输出来自 Chrome 浏览器)
var dt1 = new Date(1975, 1 , 23, 1, 0, 0);
dt1.toString(); // Sun Feb 23 1975 01:00:00 GMT-0600 (Central Standard Time)
dt1.toUTCString(); // Sun, 23 Feb 1975 07:00:00 GMT
dt1.getTime(); // 162370800000
var dt2 = new Date(1975, 1 , 23, 2, 0, 0);
dt2.toString(); // Sun Feb 23 1975 03:00:00 GMT-0500 (Central Daylight Time)
dt2.toUTCString(); // Sun, 23 Feb 1975 08:00:00 GMT
dt2.getTime(); //162374400000
var dt3 = new Date(1975, 1 , 23, 3, 0, 0);
dt3.toString(); // Sun Feb 23 1975 03:00:00 GMT-0500 (Central Daylight Time)
dt3.toUTCString(); // Sun, 23 Feb 1975 08:00:00 GMT
dt3.getTime(); // 162374400000
对于日期对象dt2
和dt3
,观察所有值都相同。这令人困惑。
2. Internet Explorer 的夏令时开始日期错误。
在 1975 年,夏令时开始于 1975 年 2 月 23 日凌晨 2:00。当我在 Chrome 和 IE 中为 1975 年 2 月 23 日凌晨 1 点、凌晨 2 点和 1975 年 4 月 6 日凌晨 1 点、凌晨 2 点、凌晨 3 点创建日期对象时...
1975 年 2 月 23 日凌晨 1 点
Chrome:1975 年 2 月 23 日星期日 01:00:00 GMT-0600(中部标准时间)
IE : Sun Feb 23 1975 01:00:00 GMT-0600 (Central Standard Time)
1975 年 2 月 23 日凌晨 2 点
Chrome:1975 年 2 月 23 日星期日 03:00:00 GMT-0500(中部夏令时间)
IE : Sun Feb 23 1975 02:00:00 GMT-0600 (Central Standard Time)
1975 年 4 月 6 日凌晨 1 点
铬:1975 年 4 月 6 日星期日 01:00:00 GMT-0500 (CDT) //165996000000
IE : Sun Apr 06 1975 01:00:00 GMT-0600 (CST) //165999600000。以毫秒为单位的时间也不同。
1975 年 4 月 6 日凌晨 2 点 铬:1975 年 4 月 6 日星期日 02:00:00 GMT-0500 (CDT) // 165999600000
IE : Sun Apr 06 1975 01:00:00 GMT-0600 (CST) // 165999600000。以毫秒为单位的时间是相同的。
1975 年 4 月 6 日凌晨 3 点
铬:1975 年 4 月 6 日星期日 03:00:00 GMT-0500 (CDT)
IE : Sun Apr 06 1975 03:00:00 GMT-0500 (CDT)
在 1975 年的 IE 中,夏令时逻辑在 1975 年 4 月 6 日下午 2 点之后开始,而不是在 1975 年 2 月 23 日凌晨 2 点之后开始。Chrome 工作正常。
涉及夏令时时,如何在所有浏览器中显示正确的日期字符串?
解决方案
夏令时和时区是最糟糕的!:)
JavaScript 日期/时间在运行客户端时始终受制于每个浏览器的特性。因此,即使是 2 个使用相同浏览器的用户,也可能会根据他们的笔记本电脑设置而有所不同。
要专门回答您帖子中的两个问题:
1:看起来您正在从遵守 DST 而 UTC 没有的中央时区访问 JavaScript。夏令时发生在凌晨 2 点,因此 dt1 将采用标准时间,因为当晚是凌晨 1 点,而 dt2 和 dt3 分别是凌晨 2 点和凌晨 3 点,因此 dt2 和 dt3 在 dst 中。这就是差异的原因。
2:因为 Richard Nixon 在 1974 年和 1975 年臭名昭著地规定了全年夏令时。出现您正在测试的 IE 版本根据当时的执行任务处理 DST,而 Chrome 根据当前准则以一致的格式应用它.
幸运的是 MomentJS 和 MomentTimezone 可以处理所有这些变化:moment.js 浏览器是否独立?
这些是任何与日期/时间相关的基本 JavaScript 库
https://momentjs.com/
https://momentjs.com/timezone/
最简单的方法是:
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"> </script>
<script>
var now = moment();
console.log(now.format());
console.log(now.isDST());
</script>
您可以将其放在您的 bodytag 中并查看控制台,它会为您工作。玩得开心!
推荐阅读
- ms-access - 用于添加新表行并分配主键的表单按钮
- rest - 进行查询 REST put 的问题,elasticsearch
- python - 用另一个字符串列表减去字符串列表
- angular - RxJS:catchError 返回联合类型
- javascript - 单击相同的选中单选按钮时如何清除单选按钮组中选中的单选按钮
- vue.js - Nuxt.js SPA 开发服务器设置
- python - 如何在 Django 中将订单的总金额检索到数据库中
- python - 如何使用平面.多边形
- laravel - Laravel mpdf合并多个文件,无法在预期位置找到对象(2、0)
- swagger - 像 mqtt 或 sqs 这样的排队和消息传递的文档