cqwcns 发表于 2023-3-31 11:54

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模板的灵活组合,又能正确地删除年份。


请各位大佬指教,感谢。

gcode 发表于 2023-3-31 12:04

根据需求重新定义个模板吧

xyj152 发表于 2023-3-31 12:31

多了一个'-' 就把 ‘‘-’’也删除不行吗?

cqwcns 发表于 2023-3-31 13:23

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');

cqwcns 发表于 2023-3-31 13:24

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]
查看完整版本: JavaScript封装日期时间格式化