JavaScript new Date()遇到的坑

Fw恶龙

永恒的记忆

原文地址:https://segmentfault.com/a/1190000021557635
作者:Fw恶龙
本文首发于:思否

1. 需求

页面显示倒计时天数(如:当前时间距离2020-09-01 23:59:59还有几天)

2. 遇到的坑

在PC端开发完毕没有问题,上真机测试时发现,安卓也没问题,但在iOS无法正常计算时间。

3. 问题

研究了一段时间发现是由于iOS的WebKit内核无法友好的处理时间字符串格式,也不能说是它的BUG。各种时间字符串格式可以查看以下栗子:

CodePen

可以用iPhone复现该问题。

4. 解决

改成 2020/09/01 23:59:59 这种格式即可。

5. 日期字符串格式

RFC2822 标准日期字符串

YYYY/MM/DD HH:MM:SS ± timezon(时区用4位数字表示)
// eg. 1997/01/01 00:00:00+0800

ISO 8601标准日期字符串

YYYY-MM-DDThh:mm:ss ± timezone(时区用HH:MM表示)
1997-01-01T00:00:00Z
// “Z”表示UTC标准时区,即"00:00",所以这里表示零时区的`1997年1月1日00时00分00秒`
// 转换成位于东八区的北京时间则为`1997年1月1日08时00分00秒`
1997-01-01T00:00:00+01:00
// 表示东一区的1997年1月1日01时00秒00分,转换成UTC标准时间的话是1997-01-01T00:00:00Z

  • 在未指定时区的前提下,对于只精确到day的日期字符串,RFC 2822返回结果是以当前时区的零点为准,而ISO8601返回结果则会以UTC时间的零点为标准进行解析;
  • 但是上一条是ES5的标准而已,在ES6里这两种形式都会变成当前时区的零点为基准;
  • 最后,建议使用RFC2822格式;

参考链接

阅读 1.3k

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视。

191 声望
11 粉丝
0 条评论

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视。

191 声望
11 粉丝
文章目录
宣传栏