【问题标题】:Calculate time until the next occurance of 2pm using moment.js使用 moment.js 计算直到下一次下午 2 点出现的时间
【发布时间】:2018-07-25 14:06:50
【问题描述】:

我希望使用 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" 的答案而不进行四舍五入 - 如果是第二天它也会这样做,它是 "21hrs 2mins"

干杯

【问题讨论】:

    标签: javascript string date momentjs


    【解决方案1】:

    实际上 moment.from() method 总是以该格式返回 string,您无法在 hoursminutesmilliseconds 中获得其结果。

    解决方案:

    使用hoursminutes 显示自定义消息的一个小技巧是使用moment.diff() method,它返回millisecondssecondsminutes、@ 的差异987654334@或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>

    注意:

    当然你需要添加更多的测试来测试只有hours或只有minutes作为区别的情况。

    【讨论】:

      猜你喜欢
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多