JavaScript new Date()遇到的坑

永恒的记忆

1. 需求

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

2. 遇到的坑

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

3. 问题

研究了一段时间发现是因为iOS的WebKit内核没法友好的处理时间字符串格式,也不能说是它的BUG。各类时间字符串格式能够查看如下栗子:测试

CodePenspa

能够用iPhone复现该问题。3d

4. 解决

改为 2020/09/01 23:59:59 这种格式便可。code

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格式;

参考连接

相关文章
相关标签/搜索