本文分析JavaScript中new Date()函数在不同浏览器下的兼容性问题。指出使用'-'分隔的日期字符串在Chrome中正常,但在IE和Firefox中返回NaN。通过示例代码展示错误现象,并提供将日期格式转换为'/'分隔符的正确做法,确保跨浏览器兼容。
JavaScript日期函数兼容性问题概述
尽管JavaScript是同一种语言,但不同浏览器对语言标准的支持及具体实现存在差异,从而导致兼容性问题。本文将基于使用new Date()构造函数创建Date对象这一场景,深入分析此类兼容性问题。
问题现象:时间值传递失败
1. 问题的提出:开始时间和结束时间无法正确传递值
在页面开发中,我们使用了时间组件来构建时间选择框。然而测试发现,该组件在Firefox浏览器下无法正常工作,而在Chrome浏览器中运行正常。我们需要探究导致这一差异的具体原因。
问题根源分析
2. 问题分析
经过结果分析,发现问题的根源在于以下代码段:
var timestart = '2010-05-04';
var timeend = '2015-09-05';
var time1 = (timestart+' 00:00:00').toString();
var time2 = (timeend+' 23:59:59').toString();
timestart = new Date(time1);
timeend = new Date(time2);
核心问题在于new Date(time1)构造函数无法正确生成Date对象,其返回值为NaN。这确实令人困惑,我们需要进一步定位问题所在。
各浏览器执行表现对比
3. 各个浏览器上的表现
在IE浏览器下的执行情况如下:

在Firefox浏览器下的执行情况:
在Chrome浏览器下的执行情况:

通过上述分析可以得知,该JavaScript脚本在Chrome浏览器中可以正确执行,但在其他浏览器(如IE和Firefox)中会报错。
解决方案:日期格式转换
4. 正确的做法
以下是推荐的正确处理方式:
var time1 = (timestart+' 00:00:00').toString();
var time2 = (timeend+' 23:59:59').toString();
timestart = new Date(Date.parse(time1.replace(/-/g,"/"))).getTime();
timeend = new Date(Date.parse(time2.replace(/-/g,"/"))).getTime();
主要的变化在于对默认日期格式进行了转换。使用'/'分隔符的日期字符串被各个浏览器广泛支持,而使用'-'连接的日期字符串仅在Chrome下能正常工作。
核心知识点总结
5. 知识点总结
字符串'2015-09-05'无法在各个浏览器中通过new Date(str)正确生成日期对象。正确的用法是使用'2015/09/06'这种格式。