Quelle est la manière la plus simple d'obtenir une instance de new Date()
mais mettre l'heure à minuit ?
Réponses
Trop de publicités?Si vous calculez avec des dates, l'heure d'été entraînera souvent une heure de plus ou de moins que minuit (CEST). Cela entraîne une différence d'un jour lors du retour des dates. Les dates doivent donc être arrondies au minuit le plus proche. Le code sera donc (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
}
Pour ajouter 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 fréquence maximale pour un événement, en l'autorisant à se produire une fois le matin et une fois l'après-midi pour tout visiteur de mon site. La date saisie a été utilisée pour définir l'expiration du cookie.
J'ai réalisé 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());
Au cas où vous auriez déjà d3.js comme dépendance dans votre projet, ou si cela ne vous dérange pas de l'intégrer, d3-temps ( La bibliothèque d3.js est modulaire depuis la version 4.0.0. ) a obtenu Intervalles .
Ils peuvent s'avérer utiles pour définir des dates avec 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)
- Réponses précédentes
- Plus de réponses