文章参考:https://blog.csdn.net/bodilove/article/details/52105782
<script type="text/javascript">
/*
* 获得时间差,时间格式为 年-月-日 小时:分钟:秒 或者 年/月/日 小时:分钟:秒
* 其中,年月日为全格式,例如 : 2010-10-12 01:00:00
* 返回精度为:秒,分,小时,天
*/
function GetDateDiff(startTime, endTime, diffType) {
//将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式
startTime = startTime.replace(/\-/g, "/");
endTime = endTime.replace(/\-/g, "/");
//将计算间隔类性字符转换为小写
diffType = diffType.toLowerCase();
var sTime = new Date(startTime); //开始时间
var eTime = new Date(endTime); //结束时间
//作为除数的数字
var divNum = 1;
switch (diffType) {
case "second":
divNum = 1000;
break;
case "minute":
divNum = 1000 * 60;
break;
case "hour":
divNum = 1000 * 3600;
break;
case "day":
divNum = 1000 * 3600 * 24;
break;
default:
break;
}
return parseInt((eTime.getTime() - sTime.getTime()) / parseInt(divNum));
}
var result = GetDateDiff("2010-02-26 00:00:00", "2010-02-28 23:00:00", "day");
document.write("两者时间差为:" + result + "天了。");
</script>
这是常规的计算两个时间差,比如计算相差的天数,省略去了小时,上述代码输出:两者时间差为:2天了。
有较大的误差。
下面是我前两天遇到的一个面试题:计算两个时间相差的小时数,并且,如果分钟数>30,加上.5,否则加上 .0
<script type="text/javascript">
function GetDateDiff(startTime, endTime) {
//将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式
startTime = startTime.replace(/\-/g, "/");
endTime = endTime.replace(/\-/g, "/");
//将计算间隔类性字符转换为小写
diffType = diffType.toLowerCase();
var sTime = new Date(startTime); //开始时间
var eTime = new Date(endTime); //结束时间
var minus = (eTime.getTime() - sTime.getTime());
var lastMinute = minus % (1000 * 3600)/(1000 * 60);//得到余下的分钟数
// minus % (1000 * 3600)得到小时数余下的毫秒数
if(lastMinute > 30){
return parseInt(minus / parseInt(divNum) )+ ".5";
}else{
return parseInt(minus / parseInt(divNum) )+ ".0";
}
}
var result = GetDateDiff("2010-02-26 16:00:00", "2010-02-26 18:12:00");
document.write("两者时间差为:" + result);
</script>