练习牛客网笔试题--前端js--5- 按所给的时间格式输出指定的时间
// 题目描述
// 按所给的时间格式输出指定的时间
// 格式说明
// 对于 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 结果为 五
// 输入 formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w')
// 输出 2014-09-05 13:14:20 星期五
1.自己的练习
function formatDate(times, str) {
// 1. 获取事件的具体信息
var year = times.getFullYear();
var month = times.getMonth() + 1;
var date = times.getDate();
var day = times.getDay();
var week = ['日', '一', '二', '三', '四', '五', '六'];
var hour = times.getHours();
var minute = times.getMinutes();
var second = times.getSeconds();
// 2. 获取格式信息
var arr = str.match(/\w+/g);
var format = str.match(/\W+/g);
format.push('');
// 定义一个对象,保存格式--时间
var obj = {};
// 补0: 如果需要两位数,就补零,否则返回原数
function addZero(time) {
return time = time < 10 ? '0' + time : time;
}
// 3. 将信息保存到对象中
// 年
arr.some(function(value) {
if(value == 'yyyy') {
obj[value] = year;
} else if(value === 'yy') {
obj[value] = year.toString().slice(2);
}
})
// 月
arr.some(function(value) {
if(value === 'MM') {
obj[value] = addZero(month);
} else if(value === 'M') {
obj[value] = month;
}
})
// 日
arr.some(function(value) {
if(value === 'dd') {
obj[value] = addZero(date);
} else if(value === 'd') {
obj[value] = date;
}
})
// 时
arr.some(function(value) {
if(value === 'H') {
obj[value] = hour;
} else if(value === 'HH') {
hour = addZero(hour);
obj[value] = hour;
} else if(value === 'h') {
hour = hour > 12 ? hour - 12 : hour;
obj[value] = hour;
} else if(value === 'hh') {
obj[value] = hour > 12 ? hour - 12 : hour;
obj[value] = addZero(hour);
}
})
// 分
arr.some(function(value) {
if(value === 'mm') {
obj[value] = addZero(minute);
} else if(value === 'm') {
obj[value] = minute;
}
})
// 秒
arr.some(function(value) {
if(value === 'ss') {
obj[value] = addZero(second);
} else if(value === 's') {
obj[value] = second;
}
})
// 周
arr.some(function(value) {
if(value === 'w') {
obj[value] = week[day];
}
})
// 4. 拼接并输出时间
var T = '';
arr.forEach(function(value, index) {
T += obj[value] + format[index];
})
return T;
}
2.题解
const log = console.log;
const formatDate = (time = (new Date()), format = ``) => {
// timestamp
let year = time.getFullYear();
let month = time.getMonth() + 1;
let date = time.getDate();
if(!format.includes(`yyyy`)) {
year = `{year}`.slice(2);
}
if(format.includes(`MM`)) {
month = month > 9 ? month : `0` + month;
}
if(format.includes(`dd`)) {
date = date > 9 ? date : `0` + date;
}
// 年月日
// 24 HH
let hour = time.getHours();
let minute = time.getMinutes();
let second = time.getSeconds();
if(format.includes(`H`)) {
if(format.includes(`HH`)) {
hour = hour > 9 ? hour : `0` + hour;
} else {
// H
// hour = hour;
}
} else {
if(format.includes(`hh`)) {
hour = hour > 12 ? `0` + (hour - 12) : `0` + hour;
} else {
// h
hour = hour > 12 ? (hour - 12) : hour;
}
}
if(format.includes(`mm`)) {
minute = minute > 9 ? minute : `0` + minute;
}
if(format.includes(`ss`)) {
second = second > 9 ? second : `0` + second;
}
// 时分秒
const weekSet = ['日', '一', '二', '三', '四', '五', '六'];
let weekDay = ``;
const arr = format.split(` `).filter(i => i.includes(`w`));
let desc = arr.length ? arr[0].replace(`w`, ``) : ``;
if(format.includes(`w`)) {
const day = time.getDay();
weekDay = weekSet[day];
}
return `${year}-${month}-${date} ${hour}:${minute}:${second} ${desc}${weekDay}`.trim();
}
// formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w')
// "2014-09-05 13:14:20 星期五"
// 2014-09-05 13:14:20 星期五