前言
日常项目开发中把一个时间戳(如何获取时间戳?)格式化为日常生活中正常常见的时间格式的业务是很常见的。这里封装了一个基础的格式化时间的函数供您参考。这个函数接收一个 10 位或者 13 位的时间戳(不传会默认当前时间),返回一个时间戳格式化后的数据对象内部包含 年、月、日、时、分、秒、date=年月日、time=时分秒、msgDate=聊天场景下可能会用到的时间格式。
注:此方法复制、粘贴即用,建议可以放到项目全局工具方法中(比如全局全局 hooks )不同页面更方便调用。
直接上代码:
代码
/**
* 格式化时间函数,接收一个长度为 10 位 或者 13 位 的时间戳
* @param {time} 时间戳 可以是 10 位或者 13 位,若不传则默认为当前时间
* @return {Object} 返回一个时间戳格式化后的数据对象内部包含 年、月、日、时、分、秒、date=年月日、time=时分秒、msgDate=聊天场景下可能会用到的时间格式
*/
formatDate(time) {
if(!time) time = new Date().getTime()
// 如果时间戳是 10位 的就 * 1000 转换为 毫秒
const _time = time.toString().length > 10 ? time : time * 1000
// console.log( (new Date()).getDate() ); // 得到今天的 号 数
// 这里传入的时间戳是 10 位的,表示为秒数,所以要乘以 1000 转换为毫秒
const date = new Date(_time);
const Y = date.getFullYear();
const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1);
const D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate());
const h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours());
const m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes());
const s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
// 最终返回的时间数据对象
const obj = {
Y,
M,
D,
h,
m,
s,
date: '',
time: '',
msgDate: ''
}
// 判断一下消息是今天的还是昨天的
if ((new Date()).getDate() == parseInt(D)) {
obj.msgDate = h + ':' + m // 如果是今天的消息则只显示时间,不显示日期
} else if ((new Date()).getDate() - parseInt(D) >= 1 && (new Date()).getDate() - parseInt(D) < 2) {
obj.msgDate = '昨天 ' + h + ':' + m
} else if ((new Date()).getFullYear() - Y > 0) { // 如果不是同一年的消息则展示年份
obj.msgDate = `${Y}年${M}月${D}日 ${h}:${m}` // X年X月X日 00:00 的格式
} else {
obj.msgDate = `${M}月${D}日 ${h}:${m}` // X月X日 00:00 的格式
}
obj.date = `${Y}年${M}月${D}日`
obj.time = `${h}:${m}:${s}`
return obj;
}
示例
返回示例截图: