Chrome在Mac和Windows下,对中国标准时间(CST)和中国夏令时(CDT)的不同处理。

通过接口从后端获取时间戳,在前端用JS格式化显示。发现Chrome在Mac和Windows下,对特定的时间段(1986年至1991年),的处理方式并不相同。

查询资料后发现,原来中国也曾经使用过夏令时。

1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986
年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。1992年4月5日后不再实行。

要避免此情况可在后端对时间进行处理,返回格式化后的日期字符串。

或在前端通过getTimezoneOffset检测夏令时,尝试网上找到的夏令时检测算法。

参考资料:
时间是什么?
java中的时区陷阱
Java —— 时区(夏令时)问题
CST和GMT时间的区别
使用 JavaScript 处理夏令时
js获得当前时区夏令时发生和终止的时间
List of time zone abbreviations
tz database
Daylight saving time
Time in China
Time zone
ISO 8601

《Chrome在Mac和Windows下,对中国标准时间(CST)和中国夏令时(CDT)的不同处理。》上有2条评论

  1. 今天在做项目时发现,通过new Date(“后端给的时间戳”),再通过new date().getfullyear 和 getMonth和getDate 通过“-”拼接好的日期格式1987-07-06显示到页面时,在chrome上是7月6号,在ie11上显示的是7月5号,看了您的这篇微博得知1987年正好在1986到1991年之间,说明后端传给前端时间戳时没有进行时区的处理,我的个人理解,有错误请指出,谢谢!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注