需求:
- 当我们在开发过程中,经常会遇到对日期进行展示的这种需求
- 通常我们拿到的数据都是时间戳,这个时候就需要我们做一些操作,使得时间戳能变成具体的年月日时分秒,再对其展示
- 有时候对展示的日期格式还有要求,所以对此我专门写了一个工具函数,并且对其进行了详细的解释
第一版:简单易懂,但是代码重复性非常高,典型的垃圾代码
const productJSON = {
name: "computer",
nowPrice: 5999,
oldPrice: 6999,
endTime: "1659252301637"
}
function add(time) {
return String(time).padStart(2, "0")
}
function fmtTime(time, formatString) {
const date = new Date(Number(time))
let newTime = formatString
const year = add(date.getFullYear())
const month = add(date.getMonth() + 1)
const day = add(date.getDate())
const hours = add(date.getHours())
const minute = add(date.getMinutes())
const second = add(date.getSeconds())
const yearReg = /Y+/
const monthReg = /M+/
const dayReg = /D+/
const hoursReg = /h+/
const minuteReg = /m+/
const secondReg = /s+/
for (let i = 0; i < 6; i++) {
if (yearReg.test(newTime)) {
newTime = newTime.replace(yearReg, year)
} else if (monthReg.test(newTime)) {
newTime = newTime.replace(monthReg, month)
} else if (dayReg.test(newTime)) {
newTime = newTime.replace(dayReg, day)
} else if (hoursReg.test(newTime)) {
newTime = newTime.replace(hoursReg, hours)
} else if (minuteReg.test(newTime)) {
newTime = newTime.replace(minuteReg, minute)
} else if (secondReg.test(newTime)) {
newTime = newTime.replace(secondReg, second)
}
}
return newTime
}
console.log(fmtTime(productJSON.endTime, "YY-MM-DD hh:mm:ss"))
第二版:对第一版进行了很大程度的改善,但是相比于第一版不太容易理解
const productJSON = {
name: "computer",
nowPrice: 5999,
oldPrice: 6999,
endTime: "1659252301637"
}
function fmtTime(time, formatString) {
const date = new Date(Number(time))
const timeObj = {
"Y+": date.getFullYear(),
"M+": date.getMonth() + 1,
"D+": date.getDate(),
"h+": date.getHours(),
"m+": date.getMinutes(),
"s+": date.getSeconds()
}
for (let timeItem in timeObj) {
const timeReg = new RegExp(timeItem)
if ((timeReg).test(formatString)) {
formatString = formatString.replace(timeReg, (String(timeObj[timeItem])).padStart(2, "0"))
}
}
return formatString
}
console.log(fmtTime(productJSON.endTime, "YY-MM-DD hh:mm:ss"))