自动计算日期时间格式

该代码实现了一个自动根据时间差来格式化日期的功能。如果时间在1分钟内,显示'刚刚';1小时内显示分钟数;今天以内显示具体时间;昨天以内显示'昨天'及时间;当月以内显示日期及时间;当年以内显示月、日及时间;否则使用完整日期时间格式。通过切换不同情况,可以得到合适的时间表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

规则(与当前时间相比较)格式
小于1分钟刚刚
小于1小时xx分钟前
今天以内今天 HH:mm
昨天以内昨天 HH:mm
当月dd日 HH:mm
当年MM月dd日 HH:mm
默认yyyy年MM月dd日 HH:mm

直接上代码

//日期格式
const FORMAT = {
    DATE_FORMAT: 'yyyy年MM月dd日 HH:mm',
    MONTH_FORMAT: 'MM月dd日 HH:mm',
    DAY_FORMAT: 'dd日 HH:mm',
    TIME_FORMAT: 'HH:mm:ss',
    DATETIME_FORMAT: 'yyyy-MM-dd HH:mm:ss',
    TODAY_FORMAT: '今天 HH:mm',
    YESTERDAY_FORMAT: '昨天 HH:mm'

};

module.exports = {
    /**
     *
     * 自动计算时间格式
     * @param timeStr 日期字符串
     */
    autoFormat(timeStr) {

        //解析日期字符串
        var longTime = Date.parse(timeStr);
        if (isNaN(longTime)) {
            return "日期格式错误";
        }

        var date = new Date(longTime);
        //返回值时间字符串
        var dataStr;
        //传入时间时间戳
        var milliseconds = date.getTime();
        //当前时间戳
        var nowMilliseconds = new Date().getTime();

        var now = new Date();
        //今天凌晨时间戳
        now.setHours(0, 0, 0, 0);
        var nowMs = now.getTime();
        //当月月初时间戳
        now.setDate(1);
        var monthMs = now.getTime();
        //今年年初时间戳
        now.setMonth(1, 1);
        var yearMs = now.getTime();

        //昨天凌晨时间戳
        var yesterdayMs = new Date(nowMs - 86400000).getTime();

        //相差毫秒数
        var num = nowMilliseconds - milliseconds;

        switch (true) {
            //小于0
            case num<0:{
                dataStr = "日期错误";
                break;
            }
            //小于一分钟
            case num<60000:{
                dataStr = "刚刚";
                break;
            }
            //小于一小时
            case num<3600000:{
                var minutes = parseInt(num / 60000);
                dataStr = minutes+"分钟前";
                break;
            }
            //今天以内
            case milliseconds > nowMs: {
                dataStr = this.dateFormat(date, FORMAT.TODAY_FORMAT);
                break;
            }
            //昨天以内
            case milliseconds > yesterdayMs: {
                dataStr = this.dateFormat(date, FORMAT.YESTERDAY_FORMAT);
                break;
            }
            //当月以内
            case milliseconds > monthMs: {
                dataStr = this.dateFormat(date, FORMAT.DAY_FORMAT);
                break;
            }
            //当年以内
            case milliseconds > yearMs: {
                dataStr = this.dateFormat(date, FORMAT.MONTH_FORMAT);
                break;
            }
            default:{
                dataStr = this.dateFormat(date, FORMAT.DATE_FORMAT);
            }

        }
        return dataStr;
    },
    /**
     * 日期格式化
     * @param date Date对象
     * @param format 目标日期格式
     * @returns {*}
     */
    dateFormat(date,format){
        // 获取完整的年份(4位,1970)
        var year = date.getFullYear();
        // 获取月份(0-11,0代表1月)
        var month = date.getMonth() < 9 ? '0' + (date.getMonth()+1) : date.getMonth()+1;
        // 获取日(1-31)
        var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
        // 获取小时数(0-23)
        var hours = date.getHours()< 10 ? '0' + date.getHours() : date.getHours();
        // 获取分钟数(0-59)
        var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
        // 获取秒数(0-59)
        var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();

        format = format.replace(/yyyy/g, year);
        format = format.replace(/MM/g, month);
        format = format.replace(/dd/g, day);
        format = format.replace(/HH/g, hours);
        format = format.replace(/mm/g, minutes);
        format = format.replace(/ss/g, seconds);
        return format;
    }
};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值