使用场景
-
后台传过来的时间格式不正确 但是我们需要在页面上展示 'yyyy-MM-dd hh-mm-ss' 类似的时间格式
-
前端在某些场景下需要获取 'yyyy-MM-dd hh-mm-ss' 形式格式的时间,不可能每次用到的时候都去写一遍,这样耦合性太高。
代码实现
/**
* 日期时间格式转换
* @param {String || Number} dateStr "1995-12-17T03:24:00" || 1605592704154
* @param {String} format "yyyy-MM-dd hh:mm:ss"
* @returns "2020-05-29 12:32:12"
*/
function getFormatDate(dateStr = null, format = "yyyy-MM-dd hh:mm:ss") {
const date = new Date(
typeof dateStr === "number" ? dateStr : Number(dateStr)
);
const o = {
"M+": date.getMonth() + 1, //month
"d+": date.getDate(), //day
"h+": date.getHours(), //hour
"m+": date.getMinutes(), //minute
"s+": date.getSeconds(), //second
"q+": Math.floor((date.getMonth() + 3) / 3), //quarter(季度)
S: date.getMilliseconds() //millisecond
};
if (/(y+)/.test(format)) {
const m = RegExp.$1; // yyyy
format = format.replace( //匹配年份
m,
(date.getFullYear() + "").substr(4 - m.length) //从末尾截取
/* 1. substr(start, num) 从start 开始截取num 位
* 2. substring(start, end) 从start 开始截取到end start 取得到,end 取不到
*/
);
}
for (let k in o) {
if (new RegExp(`(${k})`).test(format)) {
// console.log(RegExp.$1); MM dd hh mm ss
format = format.replace( //匹配月、日、时分秒
RegExp.$1,
RegExp.$1.length == 1
? o[k]
: ("00" + o[k]).substr(("" + o[k]).length)
// 拼接 '00' 的目的是如果当前月份、天数、小时...是小于10的话, 拼接成 '01'的形式
('' + o[k]).padStart(2, '0') 也可实现
);
}
}
return format;
}