Antworten:
Das setHoursVerfahren kann optional nehmen minutes, secondsund msArgumente, zum Beispiel:
var d = new Date();
d.setHours(0,0,0,0);
Das wird die Zeit einzustellen , 00:00:00.000von Ihrer aktuellen Zeitzone , wenn Sie zur Arbeit in UTC - Zeit wollen, können Sie das verwenden setUTCHoursMethode.
new Date(new Date().setHours(0,0,0,0)).
Ich wollte nur klarstellen, dass der Ausschnitt aus der akzeptierten Antwort die nächste Mitternacht in der Vergangenheit angibt :
var d = new Date();
d.setHours(0,0,0,0); // last midnight
Wenn Sie in Zukunft die nächste Mitternacht erhalten möchten , verwenden Sie den folgenden Code:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
Ein Einzeiler für Objektkonfigurationen:
new Date(new Date().setHours(0,0,0,0));
Beim Erstellen eines Elements:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
Ich werde dies hier nur hinzufügen, weil ich auf dieser Seite gelandet bin und nach Möglichkeiten gesucht habe, dies in moment.js zu tun und und anderen zu tun.
[Begründung: Das Wort "Moment" erscheint bereits an anderer Stelle auf dieser Seite, daher suchen Suchmaschinen direkt hier und moment.js ist weit genug verbreitet, um zu , dass es behandelt wird, wie oft es in anderen SO-Fragen erwähnt wird.]
Also, in Version 2.0.0 und höher:
date.startOf('day');
Für frühere Versionen:
date.sod();
Docs:
moment(DATE_OBJECT).startOf('day').toDate();
Sie können wahrscheinlich verwenden
new Date().setUTCHours(0,0,0,0)
wenn Sie den Wert nur einmal benötigen.
Um das Beispiel von @ Dan noch nützlicher zu machen, musste ich den nächsten Mittag oder Mitternacht finden.
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
}
Auf diese Weise konnte ich eine Frequenzobergrenze für ein Ereignis festlegen, die für jeden Besucher meiner Website nur einmal am Morgen und einmal am Nachmittag erfolgen konnte. Das erfasste Datum wurde verwendet, um den Ablauf des Cookies festzulegen.
Wenn Sie mit Daten rechnen, verursacht die Sommerzeit häufig 1 Stunde mehr oder eine Stunde weniger als Mitternacht (MESZ). Dies führt zu einer Differenz von 1 Tag, wenn die Daten zurückkehren. Die Daten müssen also auf Mitternacht gerundet werden. Der Code lautet also (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
}
Ich habe ein paar Prototypen gemacht, um das für mich zu erledigen.
// 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;
});
Wenn Sie den Sicherheitscheck nicht möchten, können Sie ihn einfach verwenden
Date.prototype.startOfDay = function(){
/*Method body here*/
};
Anwendungsbeispiel:
var date = new Date($.now()); // $.now() requires jQuery
console.log('startOfDay: ' + date.startOfDay());
console.log('endOfDay: ' + date.endOfDay());
Falls Sie d3.js bereits als Abhängigkeit in Ihrem Projekt haben oder es Ihnen nichts ausmacht, es einzubringen , hat d3-time ( die Bibliothek von d3.js ist ab Version 4.0.0 modular aufgebaut ) Intervalle .
Sie können sich als nützlich erweisen, wenn Datumsangaben auf "Standard" -Werte gesetzt werden, z. B. Mitternacht, 0,00 Sekunden, der erste des Monats usw.
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)