Odpowiedzi:
setHoursMetoda może mieć opcjonalny minutes, secondsa msargumenty, na przykład:
var d = new Date();
d.setHours(0,0,0,0);
Że będzie ustawić czas 00:00:00.000od aktualnej strefy czasowej , jeśli chcesz pracować w czasie UTC, można użyć setUTCHoursmetody.
new Date(new Date().setHours(0,0,0,0)).
Chciałem tylko wyjaśnić, że fragment zaakceptowanej odpowiedzi daje najbliższą północ w przeszłości :
var d = new Date();
d.setHours(0,0,0,0); // last midnight
Jeśli chcesz uzyskać najbliższą północ w przyszłości , użyj następującego kodu:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
Jednowarstwowy dla konfiguracji obiektów:
new Date(new Date().setHours(0,0,0,0));
Podczas tworzenia elementu:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
Dodam to tutaj, bo wylądowałem na tej stronie, szukając sposobu na zrobienie tego w chwili.js i inni też mogą to zrobić.
[Uzasadnienie: słowo „moment” pojawia się już gdzie indziej na tej stronie, więc wyszukiwarki bezpośrednio tutaj, a moment.js jest wystarczająco rozpowszechniony, aby zagwarantować, że będzie on omawiany, jak często jest wymieniany w innych pytaniach SO związanych z datą]
W wersji 2.0.0 i nowszej:
date.startOf('day');
W przypadku wcześniejszych wersji:
date.sod();
Dokumenty:
moment(DATE_OBJECT).startOf('day').toDate();
Prawdopodobnie możesz użyć
new Date().setUTCHours(0,0,0,0)
jeśli potrzebujesz tej wartości tylko raz.
Dodając użyteczność do przykładu @ Dana, musiałem znaleźć następne południe lub północ.
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
}
Pozwoliło mi to ustawić ograniczenie częstotliwości dla wydarzenia, pozwalając, aby miało to miejsce tylko raz rano i raz po południu dla każdego odwiedzającego moją witrynę. Przechwycona data została wykorzystana do ustawienia daty ważności pliku cookie.
Jeśli obliczanie według dat lato będzie często powodować 1 godzinę więcej lub godzinę mniej niż północ (CEST). Powoduje to różnicę 1 dnia, gdy daty wracają. Więc daty muszą zaokrąglić do najbliższej północy. Więc kod będzie (ths to 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
}
Zrobiłem dla mnie kilka prototypów.
// 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;
});
jeśli nie chcesz kontroli bezpieczeństwa, możesz po prostu użyć
Date.prototype.startOfDay = function(){
/*Method body here*/
};
Przykładowe użycie:
var date = new Date($.now()); // $.now() requires jQuery
console.log('startOfDay: ' + date.startOfDay());
console.log('endOfDay: ' + date.endOfDay());
Jeśli masz już d3.js jako zależność w swoim projekcie lub nie masz nic przeciwko wprowadzeniu go, czas d3 ( biblioteka d3.js jest modułowa od wersji 4.0.0 ) ma interwały .
Mogą się przydać przy ustawianiu dat na „domyślne” wartości, np. Północ, 0,00 sekundy, pierwszy dzień miesiąca itp.
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)