"
需求:前端取后端返回的时间与当前时//代码效果参考:https://v.youku.com/v_show/id_XNjQwNjU2NzcyMA==.html
间进行比较展示,展示规则:1、返回的时间跟当前时间同年同月同日 显示 今天
2、返回的时间与当前时间相差在7天以内 显示 某天前
3、返回的时间与当前时间相差大于7天 显示 yyyy-mm-dd
4、是自然日的计算。 例如:返回的时间是 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个小时) 都算是一天
背景:考虑过时间戳相减计算,但是行不怎么通。如下:
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得到的结果取整,换成向下或向上取整都有类似的问题。
解决办法:
var lastTime = function (time) {
if (time === ""无访问记录"") return time;
if (typeof time === ""string"") {
var regexp = getRegExp('-', //代码效果参考:https://v.youku.com/v_show/id_XNjQwMDEyNDgwOA==.html
'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方法。
思路来源于我另外一篇随笔:点击进入
"