计算时间差方法,格式化输出时间差,也可根据时间单位输出时间差。

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

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值