使用 JavaScript 将日期四舍五入到最近的小时

JavaScript 将日期四舍五入到最接近的小时:

  1. 使用 setMinutes() 方法将日期的分钟数设置为其当前分钟数 + 30。
  2. 使用 setMinutes() 方法将分、秒和毫秒设置为 0。
  3. 如果在日期上加上 30 分钟会转到下一个小时,则将小时向上取整,否则向下取整。
function roundToNearestHour(date) {
  date.setMinutes(date.getMinutes() + 30);
  date.setMinutes(0, 0, 0);

  return date;
}

// ?️ Sun Jan 16 2022 14:00:00 (minutes are 30)
console.log(roundToNearestHour(new Date(2022, 0, 16, 13, 30, 00)));

// ?️ Sun Jan 16 2022 13:00:00 (minutes are 29)
console.log(roundToNearestHour(new Date(2022, 0, 16, 13, 29, 00)));

在将示例记录到控制台时,我们使用了 Date() 构造函数。我们传递的参数是:year、month(January = 0、February = 1 等)、day of month 、hours 、minutes 、seconds。

我们创建了一个可重用的函数,将日期和时间四舍五入到最接近的小时。

setMinutes 方法设置日期对象的分钟数。

该方法采用以下 3 个参数:

  • minutesValue – 0 到 59 之间的整数,表示分钟。
  • secondsValue(可选)- 0 到 59 之间的整数,表示秒。
  • msValue(可选)- 一个介于 0 和 999 之间的数字,表示毫秒。

在我们第一次调用 setMinutes() 方法时,我们使用 getMinutes() 方法获取日期对象的分钟数,并将结果加 30。

另一方面,如果将时间增加 30 分钟不会增加小时,则时间为 29 分钟或更短,我们应该将分钟数向下舍入为 0。

JavaScript 中的 Date 对象会自动处理将日期和时间增加 30 分钟会滚动到下一个小时甚至可能是第二天的情况。

function roundToNearestHour(date) {
  date.setMinutes(date.getMinutes() + 30);
  date.setMinutes(0, 0, 0);

  return date;
}

// ?️ Sun Jan 17 2022 00:00:00 (minutes are 30)
console.log(roundToNearestHour(new Date(2022, 0, 16, 23, 30, 00)));

在我们第二次调用 setMinutes() 方法时,我们将分、秒和毫秒设置为 0,以确保日期和时间对象指向整点,例如 08:00:00,而不是 08:00:30。