Date对象在移动端的坑

本文描述了工作中涉及Date对象都是一些坑的写法。

涉及移动端,测试时userAgent如下:

PC

1
2
3
4
5
6
7
// Chrome
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/49.0.2623.87 Safari/537.36

// Safari
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko)
Version/5.1.7 Safari/534.57.2

Mobile

1
2
3
4
5
6
7
// 微信
Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko)
Mobile/14D27 MicroMessenger/6.5.5 NetType/WIFI Language/zh_CN

// Safari
Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko)
Version/10.0 Mobile/14D27 Safari/602.1

测试过程

先来看一段代码:

1
2
3
4
5
if ( new Date().getTime() <= new Date('2020/03/01 24:00:00').getTime() ) {
alert('true');
} else {
alert('false')
}

输出结果毫无疑问:

1
true

坑来了~

在我的手机里,输出结果却是false

别着急,我们一步步来找原因。

先来看看new Date('2020/03/01 24:00:00')在PC和手机的输出:

1
2
3
4
5
// PC
Mon Mar 02 2020 00:00:00 GMT+0800 (中国标准时间)

// Mobile
Invalid Date

很明显,24:00:00这种写法在手机端被视为无效时间

PS:还有一种写法在手机端也被视为无效时间:new Date('2020-03-01 12:00:00')

那无效时间转成时间戳会是什么呢?答案:NaN

然后我们来测试任何数跟NaN作比较:

1
2
3
4
5
6
7
8
9
10
11
10000 > NaN     // false
10000 < NaN // false
-5 < NaN //false
'1000000' < NaN // false
null < NaN // false
undefined < NaN // false
[] < NaN // false
Object < NaN // false
NaN < NaN // false
NaN == NaN // false
NaN === NaN // false

总结

  • new Date24:00:00在移动端&PC(safari)浏览器中会被视为无效时间
  • 2017-03-01 12:00:00的横线写法在移动端&PC(safari)浏览器中会被视为无效时间
  • 无效时间经过时间戳转换后会变为NaN

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 FE blog All Rights Reserved.

访客数 : | 访问量 :