前言
时间戳的处理在前端并不少。可是真正好用的格式化时间戳却不好用。下面总结一个个人觉得比较好的方法。
实现的效果:
先上一份比较简陋的文档:
正如你所见, 时间戳可以根据自己的格式转换成想要的字符串。当然在这个方法中还有其他的内置的方法,等下会讲到
附上源码
/**
* 时间戳转换为对象 (new Date()) => (timeObject)
* @param {Number} time 传入原时间
* @return {Object} object 转换后的时间戳,和时间对象
*/
function timeToDateObj(time = new Date().getTime()) {
let date = new Date(),
weeks_ch = ["日", "一", "二", "三", "四", "五", "六"]
date.setTime(time)
return {
time: time,
day: date.getDate(),
month: date.getMonth() + 1,
year: date.getFullYear(),
week: weeks_ch[date.getDay()],
hours: date.getHours(),
minutes: date.getMinutes(),
seconds: date.getSeconds(),
hoursStr: (date.getHours() / 100).toFixed(2).split(".")[1],
minutesStr: (date.getMinutes() / 100).toFixed(2).split(".")[1],
secondsStr: (date.getSeconds() / 100).toFixed(2).split(".")[1]
}
}
/**
* 数字前置补零
* @param {Number} num 传入的数字
* @param {Number} length 需要的长度。默认2位
* @return {Number} num 转换好的数字
*/
function digit(num, length) {
let str = ""
num = String(num)
length = length || 2
for (var i = num.length; i < length; i++) {
str += "0"
}
return num < Math.pow(10, length) ? str + (num | 0) : num
}
/**
* 格式化时间戳
* @param {Number} time 需要转换的时间戳。默认当前时间
* @param {String} format 时间格式 默认 yyyy-mm-dd HH:ii:ss
* @return {String} timeStr 格式化后的字符串
*/
function formateTime(time = new Date().getTime(), format = "yyyy-mm-dd hh:ii:ss") {
// 转换时间对象
let timeObj = timeToDateObj(time),
dateType = "yyyy|y|mm|m|dd|d|hh|h|ii|i|ss|s"
// 正则
format = format.toLocaleLowerCase().match(new RegExp(dateType + "|.", "g")) || []
format.forEach((v, i) => {
if (/yyyy|y/.test(v)) {
//年
format[i] = digit(timeObj.year, v.length)
} else if (/mm|m/.test(v)) {
//月
format[i] = digit(timeObj.month, v.length)
} else if (/dd|d/.test(v)) {
//日
format[i] = digit(timeObj.day, v.length)
} else if (/hh|h/.test(v)) {
//时
format[i] = digit(timeObj.hours, v.length)
} else if (/ii|i/.test(v)) {
//分
format[i] = digit(timeObj.minutes, v.length)
} else if (/ss|s/.test(v)) {
//秒
format[i] = digit(timeObj.seconds, v.length)
}
})
return format.join("")
}
内置方法的介绍:
时间戳转时间对象 - timeToDateObj:
时间戳转换为时间对象(也是传入时间戳。不传默认就是当前时间)
console.log(timeToDateObj());
// 打印得到如下对象
{
day:27
hours:14
hoursStr:"14"
minutes:13
minutesStr:"13"
month:2
seconds:49
secondsStr:"49"
time:1551248029765
week:"三"
year:2019
}
数字前置补0 - digit:
参数1:需要处理的数字 {必填}
参数2:需要转换的长度 {非必填 | 默认为 2}
console.log(digit(1, 2)); // 01
console.log(digit(1, 3)); // 001
// 输入数字为1 需要转换长度为2 所以输出为 01
// 如果输入为1 需要转换长度为3 则输出 001
以上就是时间戳处理个人觉得比较好的方法。具体的代码可以参考 layui的日期控件