美文网首页
js计算两个日期时间之间相隔的年月日-时分

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

作者: 松油灯 | 来源:发表于2019-10-30 14:13 被阅读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;
    }
    

    效果

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

    相关文章

      网友评论

          本文标题:js计算两个日期时间之间相隔的年月日-时分

          本文链接:https://www.haomeiwen.com/subject/vtuovctx.html