JavaScript封装日期时间格式化
以下是一个JavaScript的日期时间格式化函数。参数time为要格式化的日期时间,format格式模板,justNow为是否显示近期时间的中文描述。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;
});
}
}
但我希望如果日期为当年,则不返回年份,理论上我可以判断如果是当年,就将format模板的YYYY替换为空,这样不会返回年。
但有个问题是format模板是调用时灵活组合的,以'YYYY-MM-DD HH:mm:ss'为例,我删除了'YYYY'可以避免返回年份,但多了一个'-'。
所以,有什么好的办法,既能考虑format模板的灵活组合,又能正确地删除年份。
请各位大佬指教,感谢。 根据需求重新定义个模板吧 多了一个'-' 就把 ‘‘-’’也删除不行吗? xyj152 发表于 2023-3-31 12:31
多了一个'-' 就把 ‘‘-’’也删除不行吗?
模板是灵活组合的,我们不知道调用时,使用的符合时”-“或”/“或”年“,或者根本没有分隔符,例如返回YYYYMMDD。
所以直接删除是不行的。2楼的方案是一种解决思路,就是调用时做一些判断,传入不同的模板。例如这样:
dateFormat(time, new Date(time).getFullYear() === new Date().getFullYear() ? 'M月D日 HH:mm:ss' : 'YYYY年M月D日 HH:mm:ss'); gcode 发表于 2023-3-31 12:04
根据需求重新定义个模板吧
这样?
dateFormat(time, new Date(time).getFullYear() === new Date().getFullYear() ? 'M月D日 HH:mm:ss' : 'YYYY年M月D日 HH:mm:ss');
页:
[1]