记一次后端返回数据,时间格式如图。与正常的ISO时间格式不同,且在mac上会有问题。
// 后端返回
"2022-08-16 07:58:16.967577+00:00"
//正常ISO
"2022-08-16T07:58:16.967577+00:00"
解决代码如下:
formatISODate (timeStr, fomart = "YYYY-MM-DD hh:mm:ss") {
const ua = navigator.userAgent; // 判断环境
const isTimeStr = /^[0-9]*$/.test(timeStr); // 判断是否为字符串
const isMac = /iphone|ipad|ipod|macwechat|safari/gi.test(ua); // 判断系统环境是否为MacOs或者Ios
console.log('ua', ua);
if (!timeStr) return '';
const _f = (num) => {
return num < 10 ? '0' + num : num;
}
const _iso = (str) => {
// 判断chrome, 因在MacOs的情况下, ua也返回safari
if(isMac && !/chrome/gi.test(ua)){
str = !/t/gi.test(str) ? str.toString().replace(/\s+/g, 'T') : str;
}
const date = new Date(str).toJSON();
const callback = new Date(+new Date(date) + 8 * 3600 * 1000).toISOString().replace(/t/gi, ' ').replace(/\.[\d]{3}Z/, '')
return isMac ? callback.replace(/-/g,'/') : callback;
}
if ( !isTimeStr ) timeStr = new Date(_iso(timeStr)).getTime();
let DATE = new Date(timeStr);
let y = DATE.getFullYear();
let m = DATE.getMonth() + 1;
let d = DATE.getDate();
let hh = DATE.getHours();
let mm = DATE.getMinutes();
let ss = DATE.getSeconds();
return fomart.replace("YYYY", _f(y))
.replace("MM", _f(m))
.replace("DD", _f(d))
.replace("hh", _f(hh))
.replace("mm", _f(mm))
.replace("ss", _f(ss))
}