需求:前端取后端返回的时间与当前时间进行比较展现,展现规则: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