Réponses:
La setHoursméthode peut prendre en option minutes, secondset des msarguments, par exemple:
var d = new Date();
d.setHours(0,0,0,0);
Cela définira l'heure 00:00:00.000de votre fuseau horaire actuel , si vous souhaitez travailler en heure UTC, vous pouvez utiliser la setUTCHoursméthode.
new Date(new Date().setHours(0,0,0,0)).
Je voulais juste préciser que l'extrait de la réponse acceptée donne le minuit le plus proche dans le passé :
var d = new Date();
d.setHours(0,0,0,0); // last midnight
Si vous souhaitez obtenir le minuit le plus proche à l'avenir , utilisez le code suivant:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
Une ligne pour les configurations d'objets:
new Date(new Date().setHours(0,0,0,0));
Lors de la création d'un élément:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
Je vais juste l'ajouter ici parce que j'ai atterri sur cette page en cherchant comment le faire dans moment.js et d'autres peuvent le faire aussi.
[Justification: le mot "moment" apparaît déjà ailleurs sur cette page, donc les moteurs de recherche dirigent ici, et moment.js est suffisamment répandu pour justifier d'être couvert à quelle fréquence il est mentionné dans d'autres questions SO liées à la date]
Donc, dans la version 2.0.0 et supérieure:
date.startOf('day');
Pour les versions antérieures:
date.sod();
Documents:
moment(DATE_OBJECT).startOf('day').toDate();
Vous pouvez probablement utiliser
new Date().setUTCHours(0,0,0,0)
si vous n'avez besoin de la valeur qu'une seule fois.
Ajoutant de l'utilité à l'exemple de @ Dan, j'ai eu le besoin de trouver le prochain midi ou minuit.
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
}
Cela m'a permis de fixer une limite de fréquence pour un événement, ce qui ne pouvait se produire qu'une fois le matin et une fois l'après-midi pour tout visiteur de mon site. La date capturée a été utilisée pour définir l'expiration du cookie.
Si le calcul avec des dates, l'heure d'été entraîne souvent 1 heure de plus ou une heure de moins que minuit (CEST). Cela entraîne une différence d'un jour lorsque les dates reviennent. Les dates doivent donc être arrondies à minuit le plus proche. Donc le code sera (ths à 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
}
J'ai fait quelques prototypes pour gérer cela pour moi.
// 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;
});
si vous ne voulez pas le contrôle de sécurité, vous pouvez simplement utiliser
Date.prototype.startOfDay = function(){
/*Method body here*/
};
Exemple d'utilisation:
var date = new Date($.now()); // $.now() requires jQuery
console.log('startOfDay: ' + date.startOfDay());
console.log('endOfDay: ' + date.endOfDay());
Dans le cas où vous avez déjà d3.js comme dépendance dans votre projet, ou si cela ne vous dérange pas de l'introduire, d3-time (la bibliothèque d3.js est modulaire à partir de la v4.0.0 ) a des intervalles .
Ils peuvent s'avérer utiles lors de la définition des dates sur des valeurs "par défaut", par exemple minuit, 0,00 seconde, le premier du mois, etc.
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)