js中天然日的計算

需求:前端取後端返回的時間與當前時間進行比較展現,展現規則:html

一、返回的時間跟當前時間同年同月同日 顯示 今天前端

二、返回的時間與當前時間相差在7天之內 顯示 某天前小程序

三、返回的時間與當前時間相差大於7天 顯示 yyyy-mm-dd後端

四、是天然日的計算。 例如:返回的時間是 2018-10-31 23:59:59  當前時間是 2018-11-01 14:38:00 (這裏時間戳相減是小於24個小時) 或   返回的時間是 2018-10-31 00:00:01  當前時間是 2018-11-01 14:38:00 (這裏時間戳相減是大於24個小時) 都算是一天函數

 

背景:考慮過期間戳相減計算,可是行不怎麼通。以下:spa

function getTimeDifference(date1,date2){
        date1 = new Date(date1.replace(/\-/g, "\/"));
        date2 = new Date(date2.replace(/\-/g, "\/"));
        var days = date2.getTime() - date1.getTime();
        var time = parseInt(days / (1000 * 60 * 60 * 24));
        return time;
    }

分析:用上面列舉的時間,放到這個函數裏面計算, 第一個獲得的天是0  第二個是 1 顯然,第一個獲得的是錯誤的。這裏是用parseInt獲得的結果取整,換成向下或向上取整都有相似的問題。code

 

解決辦法:regexp

var lastTime = function (time) {
    if (time === "無訪問記錄") return time;
    if (typeof time === "string") {
        var regexp = getRegExp('-', 'g');
        time = time.replace(regexp, '/');
    }
    var ct = getDate(),
        tt = getDate(time),
        curDate = ct.getDate(),
        tDate = tt.getDate(),
        diff = getDate().getTime() - getDate(time).getTime(),
        day = 24 * 3600 * 1000,
        count = 0;
    if (diff < 8 * day) {
        if (curDate === tDate) {
            return "今天";
        }
        while (tDate !== curDate) {
            count++;
            tt.setDate(++tDate);
            tDate = tt.getDate();
        }
        return count + "天前";
    }
    return _toDate(time);
},

分析:重點在while語句裏面,固然 while語句在 diff < 8 * day 條件下,就不用考慮 不一樣月的同一天。執行環境是小程序中的wxs中,因此用的是wxs中的方法,須要的能夠更換對應的js方法。htm

思路來源於我另一篇隨筆:點擊進入blog

相關文章
相關標籤/搜索