safari 中 new Date('YYYY-MM-DD HH:mm:ss’) 返回 Invalid Date 问题

问题描述

在 chrome 控制台中输入 new Date('YYYY-MM-DD HH:mm:ss') 返回对应 Date ,而在 safari 中返回 Invalid Date

原因分析

ECMA-262 标准中(Date Time String Format)将日期格式规定为 YYYY-MM-DDTHH:mm:ss.sssZ ,其中,T 标识时间开始,Z 为相对于UTC(协调世界时 - International Atomic Time)的时间偏移量,可为 Z, +HH:mm-HH:mm

由此可见,各家浏览器在实现 Date 对象时只需要兼容标准中规定的格式,其他日期格式可根据自身需要实现。

在 chrome 浏览器中,Date()YYYY-MM-DD HH:mm:ss 字符串解析为当地时间并生成对应 Date 对象,而 safari 浏览器则不支持该格式字符串的解析。

解决方案

根据协议,我们兼容各大浏览器时只需要将时间格式转化为 YYYY-MM-DDTHH:mm:ss.sssZ 即可。需要注意的是,使用这个格式生成的时间为 UTC 格式,与北京时间(CST)相差 8 个小时,所以在实际项目中,我们使用的时间格式为YYYY-MM-DDTHH:mm:ss.sss+08:00

当然,也可以使用时间转化函数,如下所示:

/**
 * 将UTC时间转化为CST时间
 * @param {Date} date 
 * @return {Date}
 */
function UTC2CST(date) {
    return new Date(date.getTime() - 8 * 60 * 60 * 1000);
}

你可能感兴趣的:(safari 中 new Date('YYYY-MM-DD HH:mm:ss’) 返回 Invalid Date 问题)