js jq插件 显示中文时间戳 刚刚 N分钟前 N小时前 今天 上午 下午 日期格式化

 注:页面需提前引用JQ

; $.fn.extend({
    /*
    ** notes: 获取13位时间戳的简单操作
    ** new Date('2018-02-01 15:10:00').getTime() // Date类型使用getTime方法
    ** "/Date(1517469000000)/".substring(6,19) // C#后台返回的DateTime数据
    */
    /*
    ** author:lttr <www.cnblogs.com/GoCircle>
    ** date:2018-02-01
    ** 对13位时间戳的扩展显示为【不久前,刚刚,N分钟前,N小时前,N天前,N周前,N月前,N年N月N日】的处理
    ** eg.
    ** $(1517469000000).commonTimeStamp();  // 1分钟前
    */
    "commonTimeStamp": function () {
        let selfTime = ((this.selector || $(this)[0]) + Array(13).join('0')).slice(0, 13) - 0,   // 补全为13位  PHP时间戳为10位
            oneselfDate = new Date(selfTime),
            diffValue = new Date().getTime() - selfTime,
            monthC = diffValue / 2592000000,// 月1000 * 60 * 60 * 24 * 30
            weekC = diffValue / 604800000,  // 周1000 * 60 * 60 * 24 * 7
            dayC = diffValue / 86400000,    // 天1000 * 60 * 60 * 24
            hourC = diffValue / 3600000,    // 时1000 * 60 * 60
            minC = diffValue / 60000;       // 分1000 * 60
        return diffValue < 0 ? '不久前' :// 如果本地时间反而小于变量时间
            monthC > 12 ? (oneselfDate.getFullYear() + '年' + Array(2 - ('' + oneselfDate.getMonth() + 1).length + 1).join(0) + (oneselfDate.getMonth() + 1) + '月' + Array(2 - ('' + oneselfDate.getDate()).length + 1).join(0) + oneselfDate.getDate() + '日') : // 超过1年,直接显示年月日
            monthC >= 1 ? (parseInt(monthC) + '月前') :
            weekC >= 1 ? (parseInt(weekC) + '周前') :
            dayC >= 1 ? (parseInt(dayC) + '天前') :
            hourC >= 1 ? (parseInt(hourC) + '小时前') :
            minC >= 1 ? (parseInt(minC) + '分钟前') : '刚刚';
    },
    /*
    ** author:lttr <www.cnblogs.com/GoCircle>
    ** date:2018-10-22
    ** 对13位时间戳的扩展显示为【今天 上午N:N,昨天 上午N:N,上午N:N】的处理
    ** eg.
    ** $(1517469000000).specificTimeStamp();  // 下午15:10
    */
    "specificTimeStamp": function () {
        let oneselfTime = new Date('2018-10-21 00:00:00').getTime(),   // 补全为13位  PHP时间戳为10位  
            parTime = new Date(oneselfTime),
            diffDay = parseInt((new Date().getTime() - oneselfTime) / 86400000);// 天1000 * 60 * 60 * 24
        return (diffDay == 1 ? "昨天 " : diffDay == 0 ? "今天 " : "") +
               ((parTime.getHours() / 12 > 1 ? "下午" : "上午") +
               Array(2 - ('' + parTime.getHours()).length + 1).join(0) + parTime.getHours() + ":" +
               Array(2 - ('' + parTime.getMinutes()).length + 1).join(0) + parTime.getMinutes());
    },
    /*
    ** author:lttr <www.cnblogs.com/GoCircle>
    ** date:2018-02-01
    ** 对13位时间戳的扩展,将时间转化为指定格式的String
    ** 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
    ** 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符
    ** eg.
    ** $(1517469000000).timeFormat("yyyy-MM-dd hh:mm:ss.f");  // 2018-02-01 15:10:00.0
    */
    "timeFormat": function (fmt) {
        let selfTime = new Date(((this.selector || $(this)[0]) + Array(13).join('0')).slice(0, 13) - 0),   // 补全为13位  PHP时间戳为10位
            o = {
                "q+": Math.floor((selfTime.getMonth() + 3) / 3), //季度
                "M+": selfTime.getMonth() + 1,                   //月份
                "d+": selfTime.getDate(),                        //
                "h+": selfTime.getHours(),                       //小时
                "m+": selfTime.getMinutes(),                     //
                "s+": selfTime.getSeconds(),                     //
                "f": selfTime.getMilliseconds()                  //毫秒
            };
        if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (selfTime.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (let k in o)
            if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        return fmt;
    }
});
原文地址:https://www.cnblogs.com/GoCircle/p/8400498.html