360浏览器极速模式日期格式数据多出8小时

最近在项目中遇到一个问题,360安全浏览器极速模式下,表格里的日期格式数据多了8个小时。其它浏览器,如Chrome、IE 11和火狐,包括360安全浏览器兼容模式下以及360的另一款极速浏览器都表现正常。

对于客户习惯使用360浏览器这一点我是挺无奈的,反正我个人对360无爱。但是问题还是得要解决啊。

js的日期对象可以识别的日期字符串有四种:

1
2
3
4
1. YYYY-MM-DD 2018-08-08 08:08:08|2018-8-8 8:8:8
2. MM-DD-YYYY 08-08-2018 08:08:08|8-8-2018 8:8:8
3. YYYY/MM/DD 2018/08/08 08:08:08|2018/8/8 8:8:8
4. MM/DD/YYYY 08/08/2018 08:08:08|8/8/2018 8:8:8

对于标准浏览器而言,这四种格式都是支持的。但是有些浏览器对于第1种格式的数据,会在其基础之上,再加上8小时,比如360安全浏览器极速模式以及Safari浏览器。项目中我所使用的正是第1种日期格式。

个人的解决办法是,将第1种日期格式转成第3种日期格式,因为第3种日期格式是所有浏览器都通用的,不存在格式不统一,可以放心使用。推荐使用正则表达式统一修改成第3种日期格式

1
timeStr.replace(/-/g, '/').replace('T', ' ')

仔细思考一下,为什么会出现日期格式不一致的原因之一,可能和服务器的日期时间格式也有关系。服务器默认日期格式就是YYYY/MM/DD,不过我将其改为YYYY-MM-DD后,其实也没什么效果。不知道重启之后会不会有效,反正我还没试过,暂时以上面的解决方法为准吧。

补充

找到360安全浏览器极速模式日期格式数据多出8小时的原因了,原来是因为360安全浏览器极速模式的内核采用的是55版本的Chrome内核。而360另一款极速浏览器采用了63版本的Chrome内核。由于Chrome内核版本不同,对于js中的new Date(“2018-08-08T00:00:00”)操作,返回的结果也不同。55版本的Chrome返回结果为2018年8月8日早上8点,而63版本的Chrome返回结果为2018年8月8日凌晨0点。很显然63版本的Chrome的结果是正确的,旧版本的Chrome在处理日期上多加了8小时。对此,解决方案就像上面所说的,应该将-替换成/,并且日期字符串中不能带T,比如这样,new Date(“2018/08/08 00:00:00”)。

avatar

chilihotpot

You Are The JavaScript In My HTML