描述
按所给的时间格式输出指定的时间
格式说明
对于 2014.09.05 13:14:20
yyyy: 年份,2014
yy: 年份,14
MM: 月份,补满两位,09
M: 月份, 9
dd: 日期,补满两位,05
d: 日期, 5
HH: 24制小时,补满两位,13
H: 24制小时,13
hh: 12制小时,补满两位,01
h: 12制小时,1
mm: 分钟,补满两位,14
m: 分钟,14
ss: 秒,补满两位,20
s: 秒,20
w: 星期,为 [‘日’, ‘一’, ‘二’, ‘三’, ‘四’, ‘五’, ‘六’] 中的某一个,本 demo 结果为 五
格式说明
对于 2014.09.05 13:14:20
yyyy: 年份,2014
yy: 年份,14
MM: 月份,补满两位,09
M: 月份, 9
dd: 日期,补满两位,05
d: 日期, 5
HH: 24制小时,补满两位,13
H: 24制小时,13
hh: 12制小时,补满两位,01
h: 12制小时,1
mm: 分钟,补满两位,14
m: 分钟,14
ss: 秒,补满两位,20
s: 秒,20
w: 星期,为 [‘日’, ‘一’, ‘二’, ‘三’, ‘四’, ‘五’, ‘六’] 中的某一个,本 demo 结果为 五
示例1
输入:
formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w')
输出:
2014-09-05 13:14:20 星期五
<script>
const a = formatDate(new Date(new Date().getTimezoneOffset()*60*1000 + 1409894060000), 'yy-M-d hh:m:s 星期w')
console.log(a)
function formatDate(date, format) {
const weeks = {
"0": "日",
"1": "一",
"2": "二",
"3": "三",
"4": "四",
"5": "五",
"6": "六",
}
const fmt = {
'y+': date.getFullYear(), // 获取完整的年份
'M+': date.getMonth() + 1, // 获取月份
'd+': date.getDate(), // 获取第几日
'H+': date.getHours(), // 获取小时数
'h+': date.getHours()%12||12, // 0%12得12,12%12得0,24%12得0, 获取12小时制的小时数
'm+': date.getMinutes(), // 获取分钟数
's+': date.getSeconds(), // 获取秒数
'w': weeks[date.getDay()] // date.getDay()获取当前是这周的第几天
}
for(let i in fmt) {
new RegExp('('+i+')').test(format) // 正则测试,获取RegExp对象,其中RegExp.$1是正则匹配得到的值
let str = ''
if (RegExp.$1.length === 1) {
str = fmt[i]
} else {
for (let y=0; y<RegExp.$1.length; y++) { // 先往前补充,避免出现位数不足显示为空的情况
str += '0'
}
str += fmt[i]
str = str.substr(-RegExp.$1.length) // 从末尾反取足够长度的数据
}
format = format.replace(RegExp.$1, str) // 替换当前匹配项的数据
}
return format
}
</script>