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

Quel est le moyen le plus simple d'obtenir une instance de New Date () mais de définir l'heure à minuit?

320
demandé sur Sixty4Bit 2010-10-09 00:24:51

10 réponses

Le setHours la méthode peut prendre en option minutes, seconds et ms arguments, par exemple:

var d = new Date();
d.setHours(0,0,0,0);

Cela définira l'heure sur 00:00:00.000 de Votre fuseau horaire actuel , Si vous voulez travailler en heure UTC, Vous pouvez utiliser le setUTCHours méthode.

651
répondu CMS 2010-10-08 20:31:43

Je voulais juste préciser que l'extrait de 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 voulez obtenir le plus proche de minuit à l'avenir, utilisez le code suivant:

var d = new Date();
d.setHours(24,0,0,0); // next midnight
155
répondu Dan 2018-07-05 18:28:17

Un one-liner 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)),
}
24
répondu Zon 2015-05-07 12:07:38

Je vais juste ajouter ceci ici parce que j'ai atterri sur cette page à la recherche de 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 assez 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 plus tôt versions:

date.sod();

Docs:

Http://momentjs.com/docs/#/manipulating/start-of/

18
répondu andyhasit 2015-06-27 22:03:20

, Vous pouvez probablement utiliser

new Date().setUTCHours(0,0,0,0)

Si vous n'avez besoin de la valeur qu'une seule fois.

5
répondu Stan 2016-01-14 12:36:21

Ajoutant de l'utilité à l'exemple de @Dan, j'avais 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 définir un plafond de fréquence pour un événement, ne permettant 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.

4
répondu jamis0n 2013-12-05 17:21:30

Si vous calculez avec des dates l'heure d'été causera souvent 1 uur de plus ou une heure de moins de minuit (CEST). Cela provoque une différence de 1 jour lorsque les dates reviennent. Donc, les dates doivent arrondir à 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
    }
4
répondu user3887038 2016-03-28 11:07:03

Dans le cas où vous avez déjà d3.js en tant que dépendance dans votre projet, ou ne me dérange pas de l'apporter, D3-time (d3.la bibliothèque js est modulaire à partir de v4.0.0) a des intervalles .

Ils peuvent s'avérer utiles lorsque vous définissez des dates sur des valeurs "par défaut", par exemple minuit, 0,00 secondes, 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)
1
répondu Peemster 2017-08-02 13:06:56

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 la vérification de sécurité, alors 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());
1
répondu Mike 2018-06-05 14:39:22

                    var a = new Array();
					var b = new Array();
					var c = new Array();
					var date = new Date().toJSON();
					a = date.split("T");
					a = a[0];
					b = a.split("-");
					var currentDate = new Date(b[0],b[1] , b[2] -29 ,-19,30,0).toJSON();
					c = currentDate.split(".");
					var newDate = c[0];
console.log(newDate);
-4
répondu Gopal Anand 2016-11-03 06:59:55