日期字符串转换浏览器与夏令时的区别

时间:2018-10-31 20:41:11

标签: javascript date datetime dst

我有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

对于日期对象dt2dt3,请注意所有值都相同。这很混乱。

2。 Internet Explorer的夏令时开始日期错误。

在1975年,夏时制开始于1975年2月23日2:00 AM。 当我为1975年2月23日1 AM、2 AM和1975年4月6日1 AM、2AM、3AM在Chrome和IE中创建日期对象时

1975年2月23日上午1点

Chrome浏览器:1975年2月23日,星期日,格林尼治标准时间0600(中部标准时间)

IE:星期日,1975年2月23日格林尼治标准时间0600(中部标准时间)

1975年2月23日凌晨2点

Chrome:1975年2月23日,星期日,格林尼治标准时间-0500(中央夏令时)

IE:1975年2月23日,星期日,格林尼治标准时间0600(中部标准时间)

1975年4月6日上午1点

Chrome浏览器:Sun 1975年4月6日01:00:00 GMT-0500(CDT)// 165996000000

IE:Sun 1975年4月6日01:00:00 GMT-0600(CST)// 165999600000。时间以毫秒为单位也不同。

1975年4月6日凌晨2点 铬:Sun Apr 06 1975 02:00:00 GMT-0500(CDT)// 165999600000

IE:星期日1975年4月6日格林尼治标准时间0600(CST)//165999600000。时间以毫秒为单位。

1975年4月6日上午3点

Chrome浏览器:1975年4月6日星期日格林尼治标准时间-0500(CDT)

IE:星期日,1975年4月6日格林尼治标准时间-0500(CDT)

在1975年的IE中,夏令时逻辑从1975年4月6日下午2点开始,而不是在1975年2月23日下午2点之后开始。 Chrome浏览器工作正常。

当涉及夏时制时,如何在所有浏览器中显示正确的日期字符串?

1 个答案:

答案 0 :(得分:1)

夏令时和时区最差! :)

JavaScript日期/时间始终在运行客户端时受每个浏览器的特性约束。因此,即使是2个使用相同浏览器的用户,其笔记本电脑设置也会有所不同。

要专门回答您帖子中的两个问题:

1:看来您正在从中央时区访问JavaScript,而该时区观察到DST,而UTC却没有。夏令时发生在凌晨2点,因此dt1将以标准时间显示,因为当天晚上是凌晨1点,而dt2和dt3分别是凌晨2点和凌晨3点。这就是造成差异的原因。

2:因为Richard Nixon在1974年和1975年臭名昭著地规定了全年夏令时。因此,您正在测试的IE版本会根据当时的执行指令来处理DST,而Chrome会以一致的格式应用根据当前指南。

幸运的是,有MomentJS和MomentTimezone处理所有这些变化:Is moment.js browser independent?

对于与日期/时间相关的所有内容,这些都是必不可少的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中,然后在控制台中查看,它将为您工作。玩得开心!