Risposte:
Il setHoursmetodo può prendere opzionale minutes, secondse msgli argomenti, per esempio:
var d = new Date();
d.setHours(0,0,0,0);
Ciò imposterà l'ora 00:00:00.000del tuo fuso orario corrente , se vuoi lavorare nell'ora UTC, puoi usare il setUTCHoursmetodo.
new Date(new Date().setHours(0,0,0,0)).
Volevo solo chiarire che lo snippet dalla risposta accettata dà la mezzanotte più vicina in passato :
var d = new Date();
d.setHours(0,0,0,0); // last midnight
Se si desidera ottenere la mezzanotte più vicina in futuro , utilizzare il seguente codice:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
Un one-liner per le configurazioni degli oggetti:
new Date(new Date().setHours(0,0,0,0));
Quando si crea un elemento:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
Lo aggiungerò qui solo perché sono atterrato su questa pagina cercando come farlo in moment.js e anche altri potrebbero farlo.
[Razionale: la parola "momento" appare già altrove in questa pagina, quindi i motori di ricerca si dirigono qui, e moment.js è abbastanza diffuso da garantire di essere coperto continuando su quanto spesso viene menzionato in altre domande relative alla data]
Quindi, nella versione 2.0.0 e successive:
date.startOf('day');
Per le versioni precedenti:
date.sod();
Documenti:
moment(DATE_OBJECT).startOf('day').toDate();
Probabilmente puoi usare
new Date().setUTCHours(0,0,0,0)
se hai bisogno del valore una sola volta.
Aggiungendo utilità all'esempio di @ Dan, ho avuto la necessità di trovare il mezzogiorno o la mezzanotte successivi.
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
}
Questo mi ha permesso di impostare un limite di frequenza per un evento, consentendomi solo una volta al mattino e una volta al pomeriggio per qualsiasi visitatore del mio sito. La data acquisita è stata utilizzata per impostare la scadenza del cookie.
Se il calcolo con le date dell'estate causerà spesso 1 uur in più o un'ora in meno della mezzanotte (CEST). Ciò causa una differenza di 1 giorno al ritorno delle date. Quindi le date devono arrotondare alla mezzanotte più vicina. Quindi il codice sarà (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
}
Ho realizzato un paio di prototipi per gestire questo per me.
// 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;
});
se non vuoi il controllo di sicurezza, puoi semplicemente usare
Date.prototype.startOfDay = function(){
/*Method body here*/
};
Esempio di utilizzo:
var date = new Date($.now()); // $.now() requires jQuery
console.log('startOfDay: ' + date.startOfDay());
console.log('endOfDay: ' + date.endOfDay());
Nel caso in cui abbiate già d3.js come dipendenza nel vostro progetto, o non vi dispiaccia accedervi , d3-time (la libreria d3.js è modulare dalla v4.0.0 ) ha gli Intervalli .
Potrebbero rivelarsi utili quando si impostano le date su valori "predefiniti", ad esempio mezzanotte, 0,00 secondi, il primo del mese, ecc.
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)