获取下一次遵守时间格式而不是以前的时间

Get the next time that respect a time format and not a pervious one

我正在尝试获取下一个“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 点的最佳方法是什么?

您可以使用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 从星期几中获取 moment 对象并将小时设置为 6,将分钟和秒设置为 0:

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

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

您正在获取当天的 moment 对象,因为正如 moment Default 部分所述:

You can create a moment object specifying only some of the units, and the rest will be defaulted to the current day, month or year, or 0 for hours, minutes, seconds and milliseconds.

您可以简单地测试您的 moment 对象是否在过去(如果需要,使用 isBefore) and 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>