JS计算时间差问题,求方法。。。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS计算时间差问题,求方法。。。相关的知识,希望对你有一定的参考价值。
是这样的:要计算两个时间相差的秒和毫秒数。
例如:
08:12:34.008 - 08:12:32.252 = 1.756
就是这种格式的时间字符串,结果范围不超过59.999秒,求大神支招啊。
PS:自己想过吧两个时间转换为毫秒数,在用差值除以1000,可是不知道怎么讲这种格式(08:12:34.008)的字符串转换为毫秒数!!!
先谢谢各位的回答啊,非常感谢。
发现个小问题,请教下大家,parseInt(“008”)出来的结果是0,不是8,这是为什么?
Number()函数到是可以,但是后续计算比较繁琐(x*60*60*1000)!
大家基本上也都是采用的毫秒差的解决方案,记得Date中有个方法可以直接将字符串转换为毫秒数,查了一晚上API终于找到了。因为日期是从1970年开始的,所以我在前边写死了日期加上时间直接转换为了毫秒数:Date.parse(“1970-01-01 ”+startTime);早8点之前会出现负数,所以给成1970-01-02合适。
* timeDiff(first,sencond,[pattern])
*/
var TimeDiff = (function (f)
return function (a, b, p)
return f(a, p) - f(b, p);
;
(function (t, p)
return(function (h, m, s, ss, f)
return f = parseInt, 1000 * (60 * (60 * f(h || 0) + f(m || 0)) + f(s || 0)) + f(ss || 0);
).apply(0, (p || /^(\\d\\d):(\\d\\d):(\\d\\d)\\.(\\d\\d\\d)$/).exec(t).splice(1));
));
TimeDiff("08:12:34.008", "08:12:34.007");//楼主格式
TimeDiff("9","8",/^()()(\\d)()$/);//计算两个分钟时间的毫秒差
TimeDiff("12:34","13:34",/^()(\\d+):(\\d+)()$/);//计算分钟:秒格式的毫秒差
如果要格式化就很简单了吧
/*** TimeFmt(毫秒,格式)
*/
var TimeFmt = function (t, f, d, i)
for (i in d = ss: 1000, s: 60, m: 60, h: 60)
f = f.replace(i, t % d[i]);
t = parseInt(t / d[i]);
return f;
;
TimeFmt(59999,"m.s");//这就是59.999
parseFloat(TimeFmt(59999,"m.s"));//转为float
TimeFmt(TimeDiff("08:12:34.008","08:12:32.252"),"s.ss");//
测试了一下,有个小bug,改正过了
追问非常感谢您的回答,小弟愚钝啊,JS不熟,看不懂,呵呵。
追答这个写法是简化代码长度的写法,基本思路是用
RegExp(正则表达式)对象,/(\d+):(\d+):(\d+)\.(\d+)/.exec("08:12:34.008")会返回5个元素的数组(假设为arr),第1个开始,是小括号对应的内容,arr.splice(1),是把arr分成2个数组,原数组只留arr[0],返回arr[1..4],传给了匿名函数function(h,m,s,ss)进行处理,结果算成毫秒。而function(h,m,s,ss)是匿名函数function(f)的第一个参数,匿名函数function(f)返回一个函数,这个函数就是真正的TimeDiff,他利用f,把两个时间字符串变成毫秒并相减,返回结果,注意p,如果传入,将会代替原来的正则表达式。我习惯简写。之所以用匿名函数,是因为两个辅助函数,对timediff函数没必要显示。timefmt更简单,利用javascript简单构造的对象ss:1000,...分别取格式化字符i,和禁制单位1000,60,60;
进行计算,每算一步,都替换一次对应的格式化字符(h,m,s,ss)
匿名函数就晕这呢,for...in...语法也不懂,呵呵。感谢回答,辛苦辛苦。
为什么要规定只能采纳一个满意回答呢!!!
这个 不一定要转换成date格式去弄的
分别对时分秒毫秒求差值,在加起来不也可以么
var exp=/(\\d+):(\\d+):(\\d+).(\\d+)/;var date1="08:12:34.008",date2="08:12:32.252";
exp.test(date1);
var h1=parseInt(RegExp.$1)
,m1=parseInt(RegExp.$2)
,s1=parseInt(RegExp.$3)
,S1=parseInt(RegExp.$4)
;
exp.test(date2);
var h2=parseInt(RegExp.$1)
,m2=parseInt(RegExp.$2)
,s2=parseInt(RegExp.$3)
,S2=parseInt(RegExp.$4)
;
var miao=((h1-h2)*60+m1-m2)*60+s1-s2;
console.log(miao);
console.log(miao*1000+S1-S2); 参考技术C function GetTime(strTime)
var t = strTime.split(/:|\\./);
var Timeseconds = parseInt(t[0] * 60 * 60,10) + parseInt(t[1],10) * 60 + parseInt(t[2],10);
var total = Timeseconds * 1000 + parseInt(t[3],10);
return total;
var spanTime = GetTime('08:12:34.008') - GetTime('08:12:32.252');
var result = (spanTime / 1000).toFixed(3);
parseInt(“008”)出来的结果是0,不是8,是把008当做2进制了,所以要完整写parseInt(“008”,10)
楼主后来想到的方法很好,没有想到呀,呵呵,学习了。
var result = ((Date.parse('1970-1-1 08:12:34.008')-Date.parse('1970-1-1 08:12:32.252'))/1000).toFixed(3);
js求时间差
js求时间差 var date1=new Date(); //开始时间 alert("aa"); var date2=new Date(); //结束时间 var date3=date2.getTime()-date1.getTime() //时间差的毫秒数 //计算出相差天数 var days=Math.floor(date3/(24*3600*1000)) //计算出小时数 var leave1=date3%(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) alert(" 相差 "+days+"天 "+hours+"小时 "+minutes+" 分钟"+seconds+" 秒")
以上是关于JS计算时间差问题,求方法。。。的主要内容,如果未能解决你的问题,请参考以下文章