66 votes

Date vs nouvelle date en JavaScript

new Date() prend un ordinal et retourne un Date objet.
Qu'est-ce que Date() et comment se fait-il qu'il donne une heure différente ?

>>> new Date(1329429600000)
Date {Fri Feb 17 2012 00:00:00 GMT+0200 ( Standard Time)}
>>> Date(1329429600000)
"Tue Mar 06 2012 15:29:58 GMT+0200 (Jerusalem Standard Time)"

134voto

pimvdb Points 66332

De la Spécifications :

Lorsque Date est appelée en tant que fonction plutôt qu'en tant que constructeur, elle renvoie une chaîne représentant l'heure actuelle (UTC).

et :

Lorsque Date est appelé dans le cadre d'une new il s'agit d'un constructeur : il initialise l'objet nouvellement créé.

Donc, new Date(...) renvoie un objet tel que obj instanceof Date est vrai, alors que Date(...) renvoie fondamentalement la même chose que new Date().toString() .

25voto

xato Points 1199

new Date crée un nouvel objet Date que vous pouvez modifier ou initialiser avec une date différente alors que Date renvoie une chaîne de la date/heure actuelle, en ignorant ses arguments.

10voto

nkron Points 1542

Vérifiez Date du JavaScript pour une référence rapide à l'API et un banc d'essai du code. Vous pouvez voir le Date() appelée sans new ne prend pas de paramètres et renvoie toujours un string représentation de la date/heure actuelle. Si vous modifiez l'échantillon pour qu'il soit :

console.log(Date());
console.log(Date(1329429600000));

Vous constaterez que les résultats sont les mêmes dans les deux cas (car JavaScript ignore les arguments supplémentaires passés aux fonctions) :

Wed Apr 11 2012 09:58:11 GMT-0700 (PDT)
Wed Apr 11 2012 09:58:11 GMT-0700 (PDT)

7voto

pollx Points 119

Nous sommes en 2017 et j'avais la même question en tête. Ce que j'ai trouvé comme réponse après quelques lectures :

"La façon la plus simple d'effectuer une conversion de type explicite est d'utiliser les fonctions Boolean() , Number() , String() , ou Object() . Nous avons déjà vu ces fonctions comme constructeurs d'objets enveloppants. Cependant, lorsqu'elles sont invoquées sans l'opérateur new, elles fonctionnent comme des fonctions de conversion et effectuent des conversions de type "

"Les classes intégrées du noyau JavaScript tentent la conversion valueOf() avant la conversion toString(), sauf pour la classe Date qui effectue la conversion toString()."

Ainsi, Date() invoqué sans le mot clé new effectue une conversion de type. Et puisque Date est un objet et qu'une conversion d'objet à primitif devrait se produire, les objets date appellent par défaut toString() (bien que Date dispose également d'une méthode valueOf() significative).

J'ai trouvé ça dans le livre "JavaScript : The Definitive Guide". Je le laisse ici pour les générations futures qui viennent de commencer à apprendre le JS :)

3voto

Date peut être appelée comme Constructeur ou comme méthode pour avoir un code intégré comme :

function Date(args){
   if (this.constructor == Date){
        // if you call : new Date(args)
    }else{
        // if you call as method : Date()
      return new Date()
   }

}

Ainsi, si vous l'appelez comme une méthode, il rappelle le constructeur pour retourner la date et l'heure actuelles.

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