【问题标题】:Get the next time that respect a time format and not a pervious one获取尊重时间格式而不是以前的时间格式的下一个时间
【发布时间】:2018-01-06 22:46:42
【问题描述】:

我正在尝试将时间调到下一个“6:00:00”,我正在使用时刻:

let shiftEnd =  moment("06:00:00", "HH:mm:ss")
console.log(shiftEnd.inspect())

它让我获得了前一个 6:00:00,即与 now() 同一天的那个。

moment("2017-07-31T06:00:00.000")

now() 是:

moment("2017-07-31T12:20:57.076")

下一个早上 6 点尚未过去的最佳方式是什么?

【问题讨论】:

    标签: javascript date time momentjs date-manipulation


    【解决方案1】:

    您正在获得当天的时刻对象,因为正如时刻 Default 部分所述:

    您可以创建仅指定部分单位的矩对象,其余的将默认为当前日、月或年,或 0 表示小时、分钟、秒和毫秒。

    您可以简单地测试您的时刻对象是否在过去(使用isBefore)和add 1 天(如果需要)。

    这里是一个活生生的例子:

    let shiftEnd =  moment("06:00:00", "HH:mm:ss")
    
    if( shiftEnd.isBefore(moment()) ){
      shiftEnd.add(1, 'd')
    }
    
    console.log(shiftEnd.inspect())
    console.log(shiftEnd.format())
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

    【讨论】:

      【解决方案2】:

      您可以使用day 方法获取当前星期几,然后将星期几加一得到明天星期几:

          var now = moment(), day;
      
          // check if before 6 am get the current day, otherwise get tomorrow
          if(now.hour() < 6)
             day = now.day();
          else
             day = now.day() + 1;
      

      然后获取明天早上 6 点,使用 isoWeekDay 从星期几中获取时刻对象,并将小时设置为 6,将分钟和秒设置为 0:

      var tomorrow = moment().isoWeekday(day).hour(6).minute(0).second(0)
      

      明天是2017-08-01T06:00:00+02:00

      【讨论】:

      • 例如凌晨 5 点,此解决方案将失败
      • 是的,但是您可以使用小时方法 (moment().hour()) 简单地检查当前小时,如果小于 6,则获取当前日期,否则获取下一个。更新了我的答案
      猜你喜欢
      • 1970-01-01
      • 2021-04-12
      • 2019-03-26
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      相关资源
      最近更新 更多