620 votes

Quelle est la meilleure façon d'initialiser une date JavaScript à minuit ?

Quelle est la manière la plus simple d'obtenir une instance de new Date() mais mettre l'heure à minuit ?

7voto

user3887038 Points 103

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
    }

5voto

jamis0n Points 1356

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.

5voto

Mike Points 381

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());

3voto

Peemster Points 56

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)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X