計算時間差方法,格式化輸出時間差,也可根據時間單位輸出時間差。

/**
 * @function 計算時間差
 * @start_time 開始時間
 * @end_time 結束時間
 * @format 輸出格式,默認 剩餘DD天hh時mm分ss秒SSSS毫秒
 * @units 輸出時間單位,默認 無,可選 天、時、分、秒、毫秒
 */
const getTimeDiff = (o = {}) => {
    let start_time = o.start_time || new Date()
    let end_time = o.end_time || new Date()
    let units = o.units
    let format = o.format || '剩餘DD天hh時mm分ss秒SSS毫秒'
    let timeDiff = end_time.getTime() - start_time.getTime();
    //取天的餘數
    let _time_d = timeDiff % 86400000;
    //獲取相差天數
    let _d = (timeDiff - _time_d) / 86400000;
    //優先級 輸出單位優先
    if (units) {
        let run = "";
        switch (units) {
            case '天':
                run = _d;
                break;
            case '時':
                run = (timeDiff - (timeDiff % 3600000)) / 3600000;
                break;
            case '分':
                run = (timeDiff - (timeDiff % 60000)) / 60000;
                break;
            case '秒':
                run = (timeDiff - (timeDiff % 1000)) / 1000;
                break;
            case '毫秒':
                run = timeDiff;
                break;
        }
        return run;
    } else {
        //取小時的餘數
        let _time_h = _time_d % 3600000;
        //獲取相差小時
        let _h = (_time_d - _time_h) / 3600000;
        //取分鐘的餘數
        let _time_m = _time_h % 60000;
        //獲取相差分鐘
        let _m = (_time_h - _time_m) / 60000;
        //取秒的餘數
        let _time_s = _time_m % 1000;
        //獲取相差秒
        let _s = (_time_m - _time_s) / 1000;
        //取毫秒的餘數
        let _time_S = _time_s % 1;
        //獲取相差毫秒
        let _S = (_time_s - _time_S) / 1;
        let _date = {
            "D+": _d,
            "h+": _h,
            "m+": _m,
            "s+": _s,
        };
        let _fmt = format;
        if (/(S+)/.test(_fmt)) {
            let _value = (_S + "").substr(4 - RegExp.$1.length);
            if (String(_value).length == 1) {
                _value = '00' + _value;
            } else if (String(_value).length == 2) {
                _value = '0' + _value;
            }
            _fmt = _fmt.replace(RegExp.$1, _value);
        }
        for (let item in _date) {
            //判斷是否存在關鍵字
            if (new RegExp("(" + item + ")").test(_fmt)) {
                //將對應的關鍵字換成對應的時間
                let _value = (RegExp.$1.length == 1) ? (_date[item]) : (("00" + _date[item]).substr(("" + _date[item]).length));
                _fmt = _fmt.replace(RegExp.$1, _value);
            }
        }
        return _fmt;
    }
}

實例:

getTimeDiff({start_time:new Date('2019/10/10 10:10:10'),end_time:new Date(),units:'天'})
//返回 82
getTimeDiff({start_time:new Date('2019/10/10 10:10:10'),end_time:new Date()})
//返回 剩餘82天06時35分06秒066毫秒

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章