吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 836|回复: 5
收起左侧

[讨论] JavaScript封装日期时间格式化

[复制链接]
cqwcns 发表于 2023-3-31 11:54
以下是一个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模板的灵活组合,又能正确地删除年份。


请各位大佬指教,感谢。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

gcode 发表于 2023-3-31 12:04
根据需求重新定义个模板吧

免费评分

参与人数 1热心值 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

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');
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 23:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表