Как округлить до ближайшего часа с помощью объекта 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
Любая помощь будет оценена!
Ответы
Ответ 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();
}