用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 是转化为毫秒,类似的方法还有asDaysasHours
或者

 const isDanger = duration.asHours() < 12

2

这一战好像回到了解放前,把大大小小的坏习惯都犯了一遍,想想之前自己因为通读了一遍moment中文网还写了两篇文章,结果现在还是这个鬼样子,究其原因,无非是掉以轻心,问题并未简单的解决后便自乱阵脚,十成功力散去七八成,俨然成了个弱智...

不过当我写这篇文章的时候又发现了更为简单的写法,过去的自己总是菜的,不进步就会一直菜。

在实际工作中,还是建议先解决问题在逐步优化,针对当前主要矛盾全力以赴,这样大脑和心脏才不会打架,解决问题也会变得高效。

上一篇下一篇

猜你喜欢

热点阅读