js计算两个日期时间之间相隔的年月日-时分

2019-10-30  本文已影响0人  松油灯

问题源

    这个问题是因为我在后台管理系统当中需要制作提示框的时候,想给用户在日期判断上面给予非常友好的提示,也就是提示具体两个日期之间相差了多久。那么先看下两个日期长什么样子吧:
2019-11-21 11:16        2020-11-19 04:24
    最终我想让提示相隔日期能够更精确点,如下:
相隔 1年零3天17小时8分钟

分析

      这个问题其实不难,只是我感觉细节比较难处理。我刚开始想的是直接两个日期相减,然后得到差值,取其绝对值,就是两个日期相隔的时间了,但仔细看,其实误差挺大的。比如11:50跟12:03,中间相隔了多久?如果是日期相减,就是相隔1个小时47分钟。很明显是不对的,我后来试着专门在这种特殊情况的位置做下处理,但加上月,年,更加繁琐,比如月的天数就不固定,也不好处理。。然后终于想到了使用毫秒的差值来进行判断,毫秒是不可能会出问题的。具体做法就是先将日期时间变成毫秒,然后将毫秒分别处理成想要的年月日-时分的形式。下面直接贴代码了。

 // 2019-10-17 18:20   2019-10-31 18:25
var result = Math.abs(毫秒日期a-毫秒日期b);
var show_date = "较远";
var minute = result/1000/60;
show_date = transDate(minute, show_date);

alert("时间相隔 " + (show_date != 0 ? show_date.toString().replace("较远", "") : "较远"));

// 将分钟转换为年月日-时分
function transDate(minute, show_date) {
    if (minute == 0 || isNaN(minute) || minute == null) {
        return 0;
    }

    if (minute/60/24/30 >= 12) {
        show_date += parseInt(minute/60/24/30/12) + "年";
    }
    if (minute%(60*24*30*12) != 0 && minute/60/24 >= 30) {
        var t = minute/60/24/30;
        if (show_date != "较远") {
            t = t - parseInt(minute/60/24/30/12) * 12;
        }
        show_date += parseInt(t) == 0 ? "零" : parseInt(t) + "个月";
    }
    if (minute%(60*24*30) != 0 && minute/60 >= 24) {
        var t = minute/60/24;
        if (show_date != "较远") {
            t = t - parseInt(minute/60/24/30) * 30;
        }
        show_date += parseInt(t) == 0 ? "零" : parseInt(t) + "天";
    }
    if (minute%(60*24) != 0 && minute >= 60) {
        var t = minute/60;
        if (show_date != "较远") {
            t = t - parseInt(minute/60/24) * 24;
        }
        show_date += parseInt(t) == 0 ? "零" : parseInt(t) + "小时";
    }
    if (minute%60 != 0){
        if (show_date != "较远") {
            minute = minute - parseInt(minute/60) * 60;
        }
        show_date += minute + "分钟";
    }

    return show_date;
}

效果

    最终的效果还是很满意的,但是处理的方式,目前,我只能想到这种方式了,无论如何都要加不一样的判断。

上一篇下一篇

猜你喜欢

热点阅读