Javascript Moment JS根据从当前时间到上一个午夜的小时数划分时间

时间:2018-08-09 13:31:26

标签: javascript momentjs

期望得到的是从当前时间到昨天的中间时间的一小时间隔

就是这样

例如:如果现在是03:34

所以我想得到这个

var durations = [
     {from:03:00, to:03:34},
     {from:02:00, to:03:00},
     {from:01:00, to:02:00},
     {from:00:00, to:01:00}
 ]

上例中的SO为03:34的值是当前时间

到目前为止,我已经能够通过获得第一段

{from:moment().startOf('hour'), to:moment()}

现在,人们陷入了如何将其他时长分开的问题,每个时长相差1小时

所以它就像

let hours_from_midnight = moment.duration(end.diff(moment().startOf('day'))).asHours();

但是现在我该如何继续使用从午夜开始的小时数来划分下一个持续时间并实现所需的持续时间

1 个答案:

答案 0 :(得分:1)

您需要做的是继续减去一个小时并克隆日期,因为所有方法都会改变现有对象:

function periods(initialTime) {
  // our lower bound
  const midnight = initialTime.clone().startOf("day");
  // our current period start
  const periodStart = initialTime.clone().startOf("hour");

  const periods = [];

  if (!(periodStart.isSame(initialTime))) {
    // only add the last period if it isn't empty
    periods.push({ start: periodStart.clone(), end: initialTime });
  }

  while (periodStart.isAfter(midnight)) {
    // the last start is our new end
    const to = periodStart.clone();
    // our new start is one hour earlier
    const from = periodStart.subtract(1, "hour").clone();

    periods.push({
      from,
      to
    });
  }

  return periods;
}

console.log(periods(moment("03:34", "HH:mm")));
console.log(periods(moment("18:00", "HH:mm")));