Firefox 下对包含时分秒日期的 Date 格式化兼容方案

对于格式为 ‘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

点赞 (1)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code