前言:
如今朋友们对“js时间计算天数”大致比较着重,大家都想要分析一些“js时间计算天数”的相关知识。那么小编同时在网摘上收集了一些关于“js时间计算天数””的相关文章,希望你们能喜欢,各位老铁们快快来学习一下吧!Date是JS中用于处理日期时间的核心对象。熟悉Date对象,可以使我们的日期处理代码写的更优雅。现在,进入正题:如何更优雅的计算时间差?
最近,接手了一套前端祖传项目,是N年前一个C#工程师写的,里面有一个计算时差函数是这么写的:
/************************************************* * 计算时差 */ function calculateTimeSpan(begTime) { var date3=new Date().getTime()-begTime.getTime() ; //时间差的毫秒数 if(date3 <0) date3 = 0 ; //计算出小时数 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); return hours+":"+minutes+":"+seconds ; }
上面的函数,大家能看懂吗?是不是觉得理解起来很吃力?这个函数接收一个开始日期时间,计算距离当前日期时间的时间差,最后返回一个截掉年月日,以时分秒表示的时间字符串。
虽然Date对象有一个getTime方法,但实际上,我们永远都不需要使用它。为什么呢?因为有更好的方法替代它。
获取当前时间的时间戳,除了getTime,还有如下方式:
const ms = Date.now()
const ms = +new Date()
是不是都比getTime写的更少?实际上,日期之间的算术运算并不需要手动转化为时间戳数值,JS内部会进行临时自动类型转化,将Date对象转化为时间戳再进行运算。计算时间差,我们可以直接这么写:
const timeSpan = new Date() - begTime
上面的计算时差函数,我这里有一个更简洁且易于理解的解决方案。就是根据任意年月日创建一个日期对象,此时它的时分秒都是0。然后,我们调用它的setMilliseconds方法,将时差毫秒传入,最后返回以它的时分秒表示的字符串即可。代码如下:
/** * 计算时差 * @param {Date} beginTime */const calcTimeSpan = beginTime => { const date = new Date(2000, 1, 1) date.setMilliseconds(Math.max(new Date() - beginTime, 0)) return `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}` }
仅需3行代码,我们便实现了与上面9行代码相同的功能,而且简洁很多。大家都能看懂吧?这个方案是不是很好理解?
若大家还有不明白的地方,欢迎评论区问我。感谢阅读!
标签: #js时间计算天数