Відповіді:
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 та інші.
[Обґрунтування: слово "момент" вже з’являється в іншому місці на цій сторінці, тому пошукові системи направляють сюди, а moment.js є досить поширеним, щоб вимагати того, щоб його часто обговорювали, як часто це згадується в інших питаннях щодо ПЗ]
Отже, у версії 2.0.0 і вище:
date.startOf('day');
Для більш ранніх версій:
date.sod();
Документи:
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;
});
якщо ви не хочете перевірити saftey, тоді ви можете просто скористатися
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-час ( бібліотека 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)