如题,就像题目说的须要计算出时间差,虽然不太难,但这个需求常常会在项目中遇到的,我在这边作一下整理,但愿可以尽可能全的整理出来。有须要的朋友能够作一下参考,喜欢的能够点波赞,或者关注一下,但愿能够帮到你们。html
本文首发于个人我的blog:obkoro1.com后端
方法定义: getTime() 方法可返回距 1970 年 1 月 1 日之间的毫秒数。数组
一般咱们计算时间差都是经过获取两个时间数据,而后分别使用getTime()方法返回与固定的1970 年 1 月 1 日的时间差,经过对返回毫秒数的差,换算成时间单位,得出两个时间的时间差。bash
首先你会有一串初始的时间数据,而后经过 new Date(你的时间数据),将你的数据转成Date对象的形式。函数
var t1="2017/08/28 04:56:38"; //数据
var dateBegin = new Date(t1);//转化为Date对象的形式
//Mon Aug 28 2017 04:56:38 GMT+0800 (中国标准时间) 这里就是Date对象的数据形式复制代码
这里的话就要注意一下后端给的时间数据格式的问题,好比下面两种:网站
第一种:"2017/08/28 04:56:38"//这种格式不用再进行处理
第二种:"2017-08-01 18:56:38"//这种格式就要进行处理复制代码
由于new Date()方法不能处理第二种数据,因此咱们这里须要将第二种数据格式转化为第一种数据的格式。ui
var t1="2017-05-12 00:13:53";
var dateBegin = new Date(d1.replace(/-/g, "/"));//replace方法将-转为/复制代码
不知道你们是什么状况,反正由于咱们后端给个人数据就是第二种的,因此我会提一下这个东西(捂脸)。spa
既然是时间差的话,就确定要有两个数据,否则怎么两相比较,通常两个数据中都会有一个当前时间的数据。.net
var dateEnd = new Date();//当前时间数据复制代码
先获取之间的毫秒差,经过毫秒差换算出你所须要的时间单位,而后时间单位之间的换算根据的是他们的倍数关系。3d
function timeFn(d1) {//di做为一个变量传进来
//若是时间格式是正确的,那下面这一步转化时间格式就能够不用了
var dateBegin = new Date(d1.replace(/-/g, "/"));//将-转化为/,使用new Date
var dateEnd = new Date();//获取当前时间
var dateDiff = dateEnd.getTime() - dateBegin.getTime();//时间差的毫秒数
var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数
var leave1=dateDiff%(24*3600*1000) //计算天数后剩余的毫秒数
var hours=Math.floor(leave1/(3600*1000))//计算出小时数
//计算相差分钟数
var leave2=leave1%(3600*1000) //计算小时数后剩余的毫秒数
var minutes=Math.floor(leave2/(60*1000))//计算相差分钟数
//计算相差秒数
var leave3=leave2%(60*1000) //计算分钟数后剩余的毫秒数
var seconds=Math.round(leave3/1000)
console.log(" 相差 "+dayDiff+"天 "+hours+"小时 "+minutes+" 分钟"+seconds+" 秒")
console.log(dateDiff+"时间差的毫秒数",dayDiff+"计算出相差天数",leave1+"计算天数后剩余的毫秒数"
,hours+"计算出小时数",minutes+"计算相差分钟数",seconds+"计算相差秒数");
}
var t3="2017-08-18 04:56:38";
timeFn(t3);复制代码
//这里的dayDiff就是上文计算出的天数差
let monthDiff=Math.floor(dayDiff/30);//以30天为一个月不够精准严谨
//获取相差的月份
if (monthDiff<12){
timeThis=monthDiff+"个月前发布";//获取相差的月份
return
}
let yearDiff=Math.floor(monthDiff/12);//获取相差的年份
if(yearDiff>=1){
timeThis=yearDiff+"年前发布";
return
}复制代码
当天数相差较大的时候,单纯计算天数已经不能知足需求了,由于咱们PM说的统一以30天为一个月的分界线,而后这里月份的计算状况感受很复杂的样子没有继续研究下去。
function getDays() {
//构造当前日期对象
var date = new Date();
var year = date.getFullYear();//获取年份
var mouth = date.getMonth() + 1;//获取当前月份
var days;//定义当月的天数;
if (mouth == 2) {//当月份为二月时,根据闰年仍是非闰年判断天数
days = year % 4 == 0 ? 29 : 28;
}
else if (mouth == 1 || mouth == 3 || mouth == 5 || mouth == 7 || mouth == 8 || mouth == 10 || mouth == 12) {
//月份为:1,3,5,7,8,10,12 时,为大月.则天数为31;
days = 31;
}
else {
//其余月份,天数为:30.
days = 30;
}
return days;
}复制代码
网上找了个获取当前月份天数的函数,上面的注释也足够全,我就一块儿贴上来,链接在下面。
上面就是本文计算时间差的内容了,但愿看完本文能给你们一点帮助。最后一个提示:通常须要处理的数据不会只有一两个,极可能会给一个数组,你须要处理每一个数组元素的时间数据,这时候建议用forEach()函数遍历整个数组。
最后:如需转载,请放上原文连接并署名。码字不易,感谢支持!本人写文章本着交流记录的心态,写的很差之处,不撕逼,可是欢迎指点。而后就是但愿看完的朋友点个喜欢,也能够关注一下我。
blog网站 and 掘金我的主页
以上2017.10.15