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 ?

1243voto

CMS Points 315406

El setHours peut prendre des options minutes , seconds y ms des arguments, par exemple :

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

Cela mettra le temps à 00:00:00.000 de votre fuseau horaire actuel Si vous souhaitez travailler en temps UTC, vous pouvez utiliser la fonction setUTCHours méthode.

64 votes

Pour information, j'exécute cette méthode ( d.setHours(0,0,0,0) ) dans une fonction de réduction sur 270K lignes, et elle est plus de 20 secondes plus rapide que d.setHours(0) ; d.setMinutes(0) ; d.setSeconds(0) ; Excellente réponse @CMS !

53 votes

Cela doit être fait en deux lignes pour que d reste un objet Date. J'ai récemment corrigé un bug qui le faisait en une seule ligne : var d = new Date().setHours(0, 0, 0, 0). Cependant, d était alors un nombre, et non une date puisque setHours renvoie un nombre.

22 votes

Je viens de tomber sur ce sujet (en retard, je sais), j'ai également besoin d'une solution en une ligne pour renvoyer une date. Pour tous ceux qui recherchent cette solution, Réponse de @Zon fonctionne parfaitement : new Date(new Date().setHours(0,0,0,0)) .

329voto

Dan Points 7078

Je voulais juste clarifier le fait que l'extrait de la réponse acceptée donne le résultat suivant 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 minuit le plus proche dans le futur utilisez le code suivant :

var d = new Date();
d.setHours(24,0,0,0); // next midnight

9 votes

Que se passe-t-il si la journée d'aujourd'hui dure 25 heures (les horloges sont avancées pour l'heure d'été) ?

9 votes

C'est un script côté client, minuit est minuit, malgré l'heure d'été Il convient également de mentionner que tous les endroits du monde n'utilisent pas l'heure d'été.

2 votes

@qntm : le changement d'heure d'été est toujours appliqué entre 2h et 4h du matin, afin qu'il n'y ait qu'un seul minuit durant cette journée :). Mais oui, 3h du matin peut arriver deux fois dans la journée (facepalm)

124voto

Zon Points 518

Une ligne unique 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)),
}

24voto

AndyHasIt Points 740

Je vais juste ajouter ceci ici parce que j'ai atterri sur cette page en cherchant comment faire cela dans moment.js et d'autres peuvent le faire aussi.

[Justification : le mot "moment" apparaît déjà ailleurs sur cette page, de sorte que les moteurs de recherche le dirigent ici, et moment.js est suffisamment répandue pour justifier d'être traitée, compte tenu de la fréquence à laquelle elle est mentionnée dans d'autres questions de l'OS relatives aux dates].

Ainsi, dans les versions 2.0.0 et supérieures :

date.startOf('day');

Pour les versions antérieures :

date.sod();

Docs :

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

23voto

Stan Points 149

Vous pouvez probablement utiliser

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

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

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