使用moment.js计算直到下一次下午2点的时间

时间:2018-07-25 14:06:51

标签: javascript string date momentjs

我正在寻找使用moment.js来计算直到下一次下午2点为止的剩余时间。

到目前为止,根据另一个脚本,我发现我有以下内容:

var getTimeLeft = function(){
  var now = moment();
  var deadline = now.clone().hour(14).minute(0).second(0);
  if(now.isAfter(deadline)) {
    var tomorrow  = moment(new Date()).add(1,'days').hour(14).minute(0).second(0);
    console.log(tomorrow.from(now));
  }else {
    console.log(deadline.from(now));
  }
}
getTimeLeft();

如果时间在下午2点之前,则以舍入格式返回时间,即“ 5小时内”

如果时间超过下午2点,则返回“一天”

如何编辑此脚本,以便如果该脚本在下午2点之前运行,我将以"4hrs 57mins"的格式得到答案而不会四舍五入-如果在第二天它将执行相同的操作,则{{1} }?

欢呼

1 个答案:

答案 0 :(得分:1)

实际上 moment.from() method 总是以该格式返回string,您无法在hoursminutes或{ {1}}。

解决方案:

使用millisecondshours显示自定义消息的一个小技巧是使用 moment.diff() method ,它返回minutes,{ {1}},millisecondssecondsminutes

hours

您只需要指定days / tomorrow.diff(now, "hours") + ' hrs, ' + (tomorrow.diff(now, "minutes") % 60) + ' mins' 作为hours方法的第二个参数,即可获得所需格式的结果。

演示:

这是一个有效的演示:

minutes
.diff()

注意:

当然,您需要添加更多测试以测试仅存在var getTimeLeft = function() { var now = moment(); var deadline = now.clone().hour(14).minute(0).second(0); if (now.isAfter(deadline)) { var tomorrow = moment(new Date()).add(1, 'days').hour(14).minute(0).second(0); console.log(tomorrow.diff(now, "hours") + ' hrs, ' + (tomorrow.diff(now, "minutes") % 60) + ' mins'); } else { console.log(deadline.diff(now, "hours") + ' hrs, ' + (deadline.diff(now, "minutes") % 60) + ' mins'); } } getTimeLeft();或仅有<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.7.0/moment.js"></script>作为差异的情况。