需求
按所给的时间格式输出指定的时间
格式说明
对于 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 结果为 五
IN
formatDate(new Date(1409894060000), ‘yyyy-MM-dd HH:mm:ss 星期w’)
OUT
2014-09-05 13:14:20 星期五
分析
- 注意时间对象月份范围是0-11,星期则是0-6
- 用replace正则匹配每一个格式,用函数参数处理
- 将无需补零的格式作为对象的键,通过时间对象方法求得到其对应的值
解法
function formatDate(d, s) {
// 构造单个基准对象
var t = {
yyyy : d.getFullYear(),
yy : d.getFullYear % 100,
M : d.getMonth() + 1,
d : d.getDate(),
H : d.getHours(),
h : d.getHours() % 12,
m : d.getMinutes(),
s : d.getSeconds(),
w : ['日', '一', '二', '三', '四', '五', '六'][d.getDay()]
}
// 补零助手函数
function pad(n) {
return n < 10 ? '0' + +n : n;
}
// 格式化
return s.replace(/([(yy)|MmdhHmsw]+)/g, function (f) {
if(f.length % 2 == 0 && f.indexOf('yy') == -1){
return pad(t[f[0]])
}
return t[f]
})
}
var d = new Date(2018, 0, 0, 0, 0, 0)
var s = 'yyyy-MM-dd hh:mm:ss 星期w'
console.log(formatDate(d, s))