需求:前端取後端返回的時間與當前時間進行比較展現,展現規則: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