Подтвердить что ты не робот

Как округлить до ближайшего часа с помощью объекта JavaScript Date

Я работаю над проектом, для которого в будущем требуется установить время с помощью объекта Date.

Например:

futureTime = new Date();
futureTime.setHours(futureTime.getHours()+2);

Мои вопросы: как только будет задана дата в будущем, как я могу округлить до ближайшего полного часа, а затем установить для него futureTime var?

Например:

Given 8:55 => var futureTime = 9:00
Given 16:23 => var futureTime = 16:00

Любая помощь будет оценена!

4b9b3361

Ответ 1

Завершите минуты, а затем очистите минуты:

var date = new Date(2011,1,1,4,55); // 4:55
roundMinutes(date); // 5:00

function roundMinutes(date) {

    date.setHours(date.getHours() + Math.round(date.getMinutes()/60));
    date.setMinutes(0);

    return date;
}

Ответ 2

Несколько более простой способ:

var d = new Date();
d.setMinutes (d.getMinutes() + 30);
d.setMinutes (0);

Ответ 3

Другие ответы игнорируют секунды и миллисекундные компоненты даты. Я бы сделал что-то вроде этого:

function roundToHour(date) {
  p = 60 * 60 * 1000; // milliseconds in an hour
  return new Date(Math.round(date.getTime() / p ) * p);
}

var date = new Date(2011,1,1,4,55); // 4:55
roundToHour(date); // 5:00

date = new Date(2011,1,1,4,25); // 4:25
roundToHour(date); // 4:00

Ответ 4

Другое решение, которое не находится рядом с таким изящным, как IAbstractDownvoteFactory

var d = new Date();
if(d.getMinutes() >= 30) {
   d.setHours(d.getHours() + 1);
}
d.setMinutes(0);

Ответ 5

Или вы можете смешать эти два для оптимального размера. http://jsfiddle.net/HkEZ7/

function roundMinutes(date) {
    return date.getMinutes() >= 30 ? date.getHours() + 1 : date.getHours();
}