/**
* @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毫秒