今天记录一种使用正则表达式将时间戳(如“1469261964000”)转换为 yyyy-MM-dd hh:mm 格式时间(如“2018-12-6 15:27”)的方法。
一、背景知识
先介绍一些相关知识点。
- 时间戳
此处指 JS 时间戳,是当前时间到 1970年1月1日00:00:00 UTC 对应的毫秒数,和 unix 时间戳并非同一概念(表示秒数)。
- 正则表达式
参考 廖雪峰-正则表达式
正则中用"()"括起来的部分表示子串(分组);
$1表示第一个子串中的内容,$2表示第二个,依此类推...
二、具体实现
function farmatDate(time, fmt) {
if (/(y+)/.test(fmt) {
fmt = fmt.replace(RegExp.$1, date.getFullYear() + '').substr(4 - RegExp.$1.length);
}
let o = {
'M+': getMonth() + 1,
'd+': getDay(),
'h+': getHours(),
'm+': getMinutes(),
's+': getSeconds()
};
for (let key in o) {
if(RegExp(`(${key})`.test(fmt)) {
let str = o[key] + '';
fmt = fmt.replace(RegExp.$1, str.length === 2 ? str:padLeftZero(str);
}
}
return fmt;
}
// 函数 padLeftZero 的作用:如果月份为1位(如9),则在其左边补0(变为09)
function padLeftZero(str) {
return '00' + substr(str.length);
}
// 举例
let res = formatDate('1469261964000', 'yyyy-MM-dd hh:mm');
console.log(res); // 2016-07-06 16:19