自动计算日期时间格式

2020-10-30  本文已影响0人  BeiYan
史前最帅程序员
规则(与当前时间相比较) 格式
小于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;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读