以下是一个JavaScript的日期时间格式化函数。参数time为要格式化的日期时间,format格式模板,justNow为是否显示近期时间的中文描述。
[JavaScript] 纯文本查看 复制代码 const dateFormat = (time = new Date(), format = 'YYYY-MM-DD HH:mm:ss', justNow = true) => {
const date = new Date(time),
year = date.getFullYear(),
month = date.getMonth() + 1,
day = date.getDate(),
hour = date.getHours(),
minute = date.getMinutes(),
second = date.getSeconds(),
now = new Date(),
diff = (now - date) / 1000 / 60; // 换算成分钟
if (justNow && diff < 10 && diff >= 0) {
return "刚刚";
} else if (justNow && diff >= 10 && diff < 60) {
return `${Math.floor(diff)}分钟前`;
} else if (justNow && diff >= 60 && diff < 720) {
return `${Math.floor(diff / 60)}小时前`;
} else {
const formatObj = {
YYYY: year,
YY: String(year).slice(2),
MM: ("0" + month).slice(-2),
M: month,
DD: ("0" + day).slice(-2),
D: day,
HH: ("0" + hour).slice(-2),
H: hour,
mm: ("0" + minute).slice(-2),
m: minute,
ss: ("0" + second).slice(-2),
s: second,
};
return format.replace(/YYYY|YY|MM|M|DD|D|HH|H|mm|m|ss|s/gi, (matched) => {
return formatObj[matched];
});
}
}
但我希望如果日期为当年,则不返回年份,理论上我可以判断如果是当年,就将format模板的YYYY替换为空,这样不会返回年。
但有个问题是format模板是调用时灵活组合的,以'YYYY-MM-DD HH:mm:ss'为例,我删除了'YYYY'可以避免返回年份,但多了一个'-'。
所以,有什么好的办法,既能考虑format模板的灵活组合,又能正确地删除年份。
请各位大佬指教,感谢。 |