new Date处理日期格式及浏览器兼容问题

最近开发项目时,业务代码中有一段比较两个时间点相距是否超过3个月的逻辑,当时的条件判断语句我是这样写的:

var sendDate = "2019-06-07 10:07:32";
if (Date.now() - new Date(sendDate).getTime() < 7776000000) {
	// 具体业务逻辑
}

然后在测试的时候,我发现这段逻辑在Chrome是正常运行的,但在IE浏览器下运行结果和Chrome不一致而且也跟我的预期结果不符,于是我修改代码变成下面这样

var sendDate = "2019-06-07 10:07:32";
console.log("time: ", new Date(sendDate ).getTime());
console.log("timeDiff: ", Date.now() - new Date(sendDate).getTime() < 7776000000);
if (Date.now() - new Date(sendDate).getTime() < 7776000000) {
	// 具体业务逻辑
}

我在执行这段代码的时候,当前系统时间是2019年6月8日15点左右,if语句的结果应该是true,会执行条件语句中的逻辑,且第一个输出语句应该是具体的时间戳,第二条输出的应该是true。然后我分别在Chrome浏览器和IE浏览器下执行
这是Chrome的运行结果:
在这里插入图片描述下面是IE的运行结果
在这里插入图片描述
可以看出来在IE下通过new Date(“2019-06-07 10:07:32”).getTime()得到的结果是不符合预期的NaN,也就导致了if条件语句的结果是false,而且这种现象在老版的Firefox也出现了。

在网上查阅了相关资料之后,发现对于我调用Date构造函数时,对传入其中的参数会有一些要求,如果输入的日期格式不是标准的日期格式,会导致在不同浏览器中得到的结果不同。当我修改代码为下面的样子:

var sendDate = "2019-06-07 10:07:32";
sendDate = sendDate.replace(/-/g, "/");		// 得到2019/06/07 10:07:32
console.log("time: ", new Date(sendDate ).getTime());
console.log("timeDiff: ", Date.now() - new Date(sendDate).getTime() < 7776000000);
if (Date.now() - new Date(sendDate).getTime() < 7776000000) {
	// 具体业务逻辑
}

再到IE浏览器和旧版本的Firefox下运行时,结果就是我想要的了
在这里插入图片描述
从这个现象我们可以看出来,其实基于"/“格式的日期字符串,才是各个浏览器所广泛支持的,而”-"连接的日期字符串,则只有在新版的Chrome、Firefox、Safari等浏览器支持,即便是最新的IE浏览器也不支持。所以当我们在业务中涉及到对日期通过new Date获取具体信息时,记得要把具体日期的格式转化为"xxxx/xx/xx xx:xx:xx",这种格式才能在各个浏览器中都被支持,无兼容性问题

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值