Как лучше всего инициализировать объект Date в JavaScript на полночь?
Каков самый простой способ получить экземпляр new Date()
, но установить время на полночь?
5 ответ(ов)
Хотелось бы уточнить, что фрагмент кода из принятого ответа получает ближайшую полночь в прошлом:
var d = new Date();
d.setHours(0,0,0,0); // последняя полночь
Если вы хотите получить ближайшую полночь в будущем, используйте следующий код:
var d = new Date();
d.setHours(24,0,0,0); // следующая полночь
Ответ на ваш вопрос может выглядеть следующим образом:
Если вам нужно задать значение для поля даты с учетом установки времени на полночь, вы можете использовать однострочное решение. Вот пример конфигурации объекта для поля даты, которое устанавливает текущее значение на начало дня:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
Этот код создает новое поле mydate
, значение которого - это текущая дата с обнуленными часами, минутами, секундами и миллисекундами. Таким образом, он всегда будет указывать на полночь текущего дня.
Вы можете использовать
new Date().setUTCHours(0, 0, 0, 0)
если вам нужно получить это значение только один раз.
Когда вы работаете с датами в летнее время (CEST), может возникнуть ситуация, при которой время окажется либо на час больше, либо на час меньше полуночи. Это может привести к разнице в один день при возвращении дат. Чтобы избежать этой проблемы, необходимо округлять время до ближайшей полуночи. Вот пример кода, который поможет вам с этой задачей (благодарности jamisOn):
var d = new Date();
if (d.getHours() < 12) {
d.setHours(0, 0, 0, 0); // предыдущая полуночь
} else {
d.setHours(24, 0, 0, 0); // следующая полуночь
}
Таким образом, с помощью этого кода вы можете корректно обработать даты, сбрасывая время до ближайшей полуночи и избегая неясностей, связанных с переходом на летнее/зимнее время.
Для добавления полезности к примеру @Dan, у меня возникла необходимость найти следующее полуденное или полночное время.
var d = new Date();
if(d.getHours() < 12) {
d.setHours(12, 0, 0, 0); // следующее полуденное время - это полдень
} else {
d.setHours(24, 0, 0, 0); // следующее полночное время - это полночь
}
Это решение позволило мне установить ограничение по частоте для события, разрешая его выполнение только один раз утром и один раз днем для любого посетителя моего сайта. Захваченная дата использовалась для установки срока действия куки.
Где найти документацию по форматированию даты в JavaScript?
В чем разница между String.slice и String.substring?
Проверка соответствия строки регулярному выражению в JS
Существует ли ссылка на "последнюю" библиотеку jQuery в Google APIs?
Как создать диалог с кнопками "Ок" и "Отмена"