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?
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.
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
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)),
}
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:
, 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'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.
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
}
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)
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());
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);