6

Как лучше всего инициализировать объект Date в JavaScript на полночь?

4

Каков самый простой способ получить экземпляр new Date(), но установить время на полночь?

5 ответ(ов)

3

Хотелось бы уточнить, что фрагмент кода из принятого ответа получает ближайшую полночь в прошлом:

var d = new Date();
d.setHours(0,0,0,0); // последняя полночь

Если вы хотите получить ближайшую полночь в будущем, используйте следующий код:

var d = new Date();
d.setHours(24,0,0,0); // следующая полночь
1

Ответ на ваш вопрос может выглядеть следующим образом:

Если вам нужно задать значение для поля даты с учетом установки времени на полночь, вы можете использовать однострочное решение. Вот пример конфигурации объекта для поля даты, которое устанавливает текущее значение на начало дня:

dateFieldConfig = {
      name: "mydate",
      value: new Date(new Date().setHours(0, 0, 0, 0)),
}

Этот код создает новое поле mydate, значение которого - это текущая дата с обнуленными часами, минутами, секундами и миллисекундами. Таким образом, он всегда будет указывать на полночь текущего дня.

0

Вы можете использовать

new Date().setUTCHours(0, 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); // следующая полуночь
}

Таким образом, с помощью этого кода вы можете корректно обработать даты, сбрасывая время до ближайшей полуночи и избегая неясностей, связанных с переходом на летнее/зимнее время.

0

Для добавления полезности к примеру @Dan, у меня возникла необходимость найти следующее полуденное или полночное время.

var d = new Date();
if(d.getHours() < 12) {
   d.setHours(12, 0, 0, 0); // следующее полуденное время - это полдень
} else {
   d.setHours(24, 0, 0, 0); // следующее полночное время - это полночь
}

Это решение позволило мне установить ограничение по частоте для события, разрешая его выполнение только один раз утром и один раз днем для любого посетителя моего сайта. Захваченная дата использовалась для установки срока действия куки.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь