JS Date对象的妙用:如何更优雅的计算时间差?

JS Date对象的妙用:如何更优雅的计算时间差?最近 接手了一套前端祖传项目 是 N 年前一个 C 工程师写的 里面有一个计算时差函数是这么写的 上面的函数 大家能看懂吗

大家好,欢迎来到IT知识分享网。

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行代码相同的功能,而且简洁很多。大家都能看懂吧?这个方案是不是很好理解?

若大家还有不明白的地方,欢迎评论区问我。感谢阅读!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/94731.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信