用moment求两个时间的间隔并格式化
2020-06-20 本文已影响0人
小遁哥
0
需求1:用后台返回的发货时间,减去现在的时间,告诉用户还有多长时间发货,例如1天24小时36分
const afterMoment = moment().add({ days: 10, hour: 4, minutes: 20 });
afterMoment.format('YYYY-MM-DD HH:mm:ss'))
=> 2020-06-30 16:10:40
const duration = moment.duration(afterMoment.diff(moment()));
或者
moment.duration(afterMoment - moment())
因为moment().valueOf()
可以得到毫秒数,而+
、-
这种操作会隐式调用valueOf
然后利用moment.duration
提供的duration.days()
或者duration.get('day')
这两种方式达到格式化
后台提供的时间格式moment
构造器都是支持的,可惜的是moment.duration
不能直接调用format
方法
毫秒
moment(Number)
秒
moment.unix(Number)
字符串
moment(String)
1
需求2:如果距离发货时间不到12小时,要标红处理
const isDanger =
duration
.clone()
.subtract(moment.duration(12, 'h'))
.asMilliseconds() <= 0;
clone()
方法是十分重要的,不然默认会在原对象上处理,会影响到duration.days()
的值,有时候你可能并不会发现
.asMilliseconds
是转化为毫秒,类似的方法还有asDays
、asHours
等
或者
const isDanger = duration.asHours() < 12
2
这一战好像回到了解放前,把大大小小的坏习惯都犯了一遍,想想之前自己因为通读了一遍moment中文网还写了两篇文章,结果现在还是这个鬼样子,究其原因,无非是掉以轻心,问题并未简单的解决后便自乱阵脚,十成功力散去七八成,俨然成了个弱智...
不过当我写这篇文章的时候又发现了更为简单的写法,过去的自己总是菜的,不进步就会一直菜。
在实际工作中,还是建议先解决问题在逐步优化,针对当前主要矛盾全力以赴,这样大脑和心脏才不会打架,解决问题也会变得高效。