Ответы:
setHoursМетод может принимать необязательный minutes, secondsи msаргументы, например:
var d = new Date();
d.setHours(0,0,0,0);
Это будет установить время 00:00:00.000из текущего часового пояса , если вы хотите работать в UTC времени, вы можете использовать setUTCHoursметод.
new Date(new Date().setHours(0,0,0,0)).
Просто хотел уточнить, что фрагмент из принятого ответа дает ближайшую полночь в прошлом :
var d = new Date();
d.setHours(0,0,0,0); // last midnight
Если вы хотите получить ближайшую полночь в будущем , используйте следующий код:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
Однострочник для конфигов объекта:
new Date(new Date().setHours(0,0,0,0));
При создании элемента:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
Просто собираюсь добавить это сюда, потому что я попал на эту страницу в поисках того, как сделать это в moment.js, и другие тоже могут это сделать.
[Обоснование: слово «момент» уже встречается в других местах на этой странице, поэтому поисковые машины направляют сюда, а момент.js достаточно широко распространен, чтобы его можно было охватить, как часто оно упоминается в других вопросах SO, связанных с датами]
Итак, в версии 2.0.0 и выше:
date.startOf('day');
Для более ранних версий:
date.sod();
Docs:
moment(DATE_OBJECT).startOf('day').toDate();
Вы, вероятно, можете использовать
new Date().setUTCHours(0,0,0,0)
если вам нужно значение только один раз.
Добавляя полезность к примеру @ Dan, мне нужно было найти следующий полдень или полночь.
var d = new Date();
if(d.getHours() < 12) {
d.setHours(12,0,0,0); // next midnight/midday is midday
} else {
d.setHours(24,0,0,0); // next midnight/midday is midnight
}
Это позволило мне установить ограничение по частоте для события, позволяя проводить его только один раз утром и один раз днем для любого посетителя моего сайта. Полученная дата была использована для определения срока действия файла cookie.
Если при расчете с датами летнее время будет часто на 1 час больше или на час меньше полуночи (CEST). Это вызывает разницу в 1 день, когда даты возвращаются. Поэтому даты должны округляться до ближайшей полуночи. Таким образом, код будет (это до jamisOn):
var d = new Date();
if(d.getHours() < 12) {
d.setHours(0,0,0,0); // previous midnight day
} else {
d.setHours(24,0,0,0); // next midnight day
}
Я сделал пару прототипов, чтобы справиться с этим для меня.
// This is a safety check to make sure the prototype is not already defined.
Function.prototype.method = function (name, func) {
if (!this.prototype[name]) {
this.prototype[name] = func;
return this;
}
};
Date.method('endOfDay', function () {
var date = new Date(this);
date.setHours(23, 59, 59, 999);
return date;
});
Date.method('startOfDay', function () {
var date = new Date(this);
date.setHours(0, 0, 0, 0);
return date;
});
если вы не хотите проверять безопасность, вы можете просто использовать
Date.prototype.startOfDay = function(){
/*Method body here*/
};
Пример использования:
var date = new Date($.now()); // $.now() requires jQuery
console.log('startOfDay: ' + date.startOfDay());
console.log('endOfDay: ' + date.endOfDay());
Если у вас уже есть d3.js как зависимость в вашем проекте, или вы не возражаете против ее включения , d3-time ( библиотека d3.js является модульной с v4.0.0 ) имеет интервалы .
Они могут оказаться полезными при установке дат на значения по умолчанию, например, полночь, 0,00 секунды, первое число месяца и т. Д.
var d = new Date(); // Wed Aug 02 2017 15:01:07 GMT+0200 (CEST)
d3.timeHour(d) // Wed Aug 02 2017 00:00:00 GMT+0200 (CEST)
d3.timeMonth(d) // Tue Aug 01 2017 00:00:00 GMT+0200 (CEST)