很多人知道如下写法来兼容苹果浏览器,但是其实这个写法也是有问题的
function praseTime(time){
let date = new Date(time.replace(/-/g,'/'))
return date;
};
因为 像这样的时间格式 2009-12-28T00:00:00.000+00:00 用/替换-后,是无法再转换为Date的。
如图
最后还有一个坑 date == 'Invalid Date'是不全面的,有时候date会NaN;我现在无法重现了。但是调试代码中的确遇到过这个辛苦
date = new Date(time)
if (date == 'Invalid Date') return time;// date == 'Invalid Date'是不全面的,有时候date会NaN
最后给一个非常完美的字符串转Date对象的函数
/**
* 字符串转成Date对象
* @param {String} time 时间字符串
* @returns Date
*/
function strToDate(time) {
if (!time) {
return new Date();
}
if (time instanceof Date) {
return time;
}
if (typeof time === "number") {
return new Date(time);
}
if (typeof time !== "string") {
return new Date();
}
let date = new Date(time);
if (isNaN(date.getDay())) {
/**考虑是苹果浏览器不兼容的情况 */
date = new Date(time.replace(/-/g, "/"));
/**还是NaN 考虑是不合法的时间字符串 */
if (isNaN(date.getDay())) {
return new Date();
}
}
return date;
}
网友评论