0

我正在尝试将时间赶到下一个“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 点尚未过去的最佳方式是什么?

4

2 回答 2

1

您可以使用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

于 2017-07-31T11:59:41.660 回答
1

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

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

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

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

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>

于 2017-07-31T12:43:48.357 回答