对于格式为 ‘2015-09-14 09:30:16’ 的日期字符串,在谷歌等浏览器下可以直接使用 new Date 进行格式化:
new Date('2015-09-14 09:30:16'); //Mon Sep 14 2015 09:30:16 GMT+0800 (中国标准时间)
但在 firefox 上却会输出 “Invalid Date”。不兼容现象由此产生。
Date 对象将字符串转为日期对象的timestamp,可由两个方法实现:
Date.parse('2015-09-14 09:30:16'); Date.UTC('2015', '08', '14', '09', '30', '16'); Date.UTC("Year","Month","Day","Hour","Minutes","Seconds");
当调用 new Date 并传入字符串时,会根据格式先自动调用这两个方法之一。
上面的不兼容性,即为在 Firefox 下 Date.parse 对输入字符串格式的不支持。
兼容方案一:
我们可以使用 Date.UTC 的格式输入,那么输入字符串格式如下:
new date("Year","Month","Day","Hour","Minutes","Seconds");
示例:
function dateParse(str) { var s = str.split(" "); var str1 = s[0].split("-"); var str2 = s[1].split(":"); return new Date(str1[0], str1[1] - 1, str1[2], str2[0], str2[1], str2[2]); } dateParse('2015-09-14 09:30:16'); //Date 2015-09-14T01:30:16.000Z
我们看到,使用UTC 方式时 month 要减一。
Date.UTC(‘2015′, ’08’, ’14’, ’09’, ’30’, ’16’);
//Date 2015-09-14T09:30:16.000Z
兼容方案二:
通过Firefox 下的转换输出,我们发现其输出格式与我们给予的格式差别,日期与格式的分隔符是 T。
那么,我们将空格分隔符替换为 T 是不是也可以呢?答案是正确的:
Date.parse(‘2015-09-14T09:30:16’);
//1442194216000
new Date(‘2015-09-14T09:30:16’);
//Date 2015-09-14T01:30:16.000Z