js中自然日的计算
需求:前端取后端返回的时间与当前时间进行比较展示,展示规则:
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('-', '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方法。
思路来源于我另外一篇随笔:点击进入
js中自然日的计算的更多相关文章
- js中对小数的计算
在js 的计算中如果涉及到小数的运算,那结果可不要想当然了,比如 0.1+0.2 的计算 var num1 = 0.1; var num2 = 0.2; console.log(num1+num2) ...
- js中offsetLeft,offsetTop,offsetParent计算边距方法
封装一个函数获得任一元素在页面的位置 var GetPosition= function (obj) { var left = 0; var top = 0; while(obj.offsetPare ...
- JS中数值类型的本质
一.JS中的数值类型 众所JS爱好友周知,JS中只有一个总的数值类型--number,它包含了整型.浮点型等数值类型.其中,浮点数的实现思想有点复杂,它把一个数拆成两部分来存储.第一部分是有效位数,也 ...
- js中如何通过身份证号计算出生日期和年龄
在html中有如下标签 身份证号:<input type="text" id="Gra_IDCard" onChange="IDCardChan ...
- js中进行金额计算parseFloat
在js中进行以元为单位进行金额计算时 使用parseFloat会产生精度问题var price = 10.99;var quantity = 7;var needPay = parseFloat(pr ...
- js中计算两个日期之差
js中计算两个日期之差 var aBgnDate, aEndDate; var oBgnDate, oEndDate; var nYl ...
- js中进行金额计算
js中进行金额计算parseFloat 在js中进行以元为单位进行金额计算时 使用parseFloat会产生精度问题var price = 10.99;var quantity = 7;var n ...
- js中进行金额计算 parseFloat 会产生精度问题
在js中进行以元为单位进行金额计算时 使用parseFloat会产生精度问题 var price = 10.99;var quantity = 7;var needPay = parseFloat(p ...
- js中如何将字符串转化为时间,并计算时间差
在前台页面开发时通常会用到计算两个时间的时间差,先在此附上实现方法 //结束时间 end_str = ("2014-01-01 10:15:00").replace(/-/g,&q ...
随机推荐
- vue路由在keep-alive下的刷新问题 对watch的影响
转载自:https://www.cnblogs.com/dansingal/p/8302100.html 问题描述: 在keep-alive中的在跳转到指定的路由时刷新对应的路由,其余不刷新. 1 2 ...
- jdbc元数据
l 在jdbc中获取数据库的定义,例如:数据库.表.列的定义信息.就用到元数据. l 在jdbc中可以使用: 数据库元数据.参数元数据.结果集元数据 l (元数据定义相关api, ..Meta ...
- 用Python在Android手机上架FTP服务器
当我们没有带数据线却将手机上的文件共享到电脑上时,架个简单的FTP服务器 可以帮我们快速解决问题.以共享手机里的照片为例: 首先将电脑.手机接入同一个wifi. 然后,手机上用QPython执行以下脚 ...
- WPF 键盘全局接收消息
1.========================================================================== 在c#中怎样禁用鼠标左键的使用,其实我们可以通 ...
- mssql表分区
1:表分区 什么是表分区一般情况下,我们建立数据库表时,表数据都存放在一个文件里.但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小 ...
- linux下mysql定时备份,数据保存周期一周
以下脚本来自网络,版权归原作者所有(推荐放在夜间自动备份,用cron制定计划任务) crontab -e 0 3 * * * /var/erp/data/mysql_backup.sh #!/bin/ ...
- Django>ORM字段和参数
Django之ORM字段和参数 字段 常用字段 AutoField 自增int自增列,必须填入参数 primary_key=True. 当model中如果没有自增列,则自动会创建一个列名为id的列 ...
- idea 中提示:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除
maven的配置文件settings.xml中添加: <profile> <id>jdk-1.8</id> <activation> <activ ...
- MySQL数据库5.7全文索引的坑
1.引擎必须是MyIsAm 2.创建全文索引:ALTER TABLE articles ADD FULLTEXT (title,body); 3.注意全文搜索的字段必须等于或者大于4个字节才会有效 4 ...
- Ubuntu腾讯云主机安装分布式memcache服务器,C#中连接云主机进行存储的示例
Ubuntu腾讯云主机安装分布式memcache服务器,C#中连接云主机进行存储的示例(github代码:https://github.com/qq719862911/MemcacheTestDemo ...