51 votes

Javascript Date.UTC () est éteint par un mois?

Je jouais avec Javascript en créant un compte à rebours simple quand je suis tombé sur ce comportement étrange:

 var a = new Date(), 
now = a.getTime(),
then = Date.UTC(2009,10,31),
diff = then - now,
daysleft = parseInt(diff/(24*60*60*1000));
console.log(daysleft );
 

Les jours restants sont coupés par 30 jours.

Quel est le problème avec ce code?

Edit: J'ai changé les noms des variables pour le rendre plus clair.

99voto

Eric J. Points 73338

Le mois est zéro pour le JavaScript.

Les jours et les années sont une base.

Aller à la figure.

Mise à JOUR

La raison c'est pourquoi, dès le créateur de JavaScript, est

JS a pour "ressembler à Java" moins, Java est stupide petit frère ou garçon-otage sidekick. De Plus, j'ai dû être fait en une dizaine de jours, ou quelque chose de pire que JS ne serait arrivé.

http://www.jwz.org/blog/2010/10/every-day-i-learn-something-new-and-stupid/#comment-1021

7voto

DVK Points 63282

Comme Eric l'a dit, cela est dû au fait que les mois sont listés dans la plage 0-11.

C'est un comportement courant - il en va de même pour les résultats Perl de localtime (), et probablement pour de nombreuses autres langues.

Ceci est probablement hérité de l'appel localtime () de Unix. (faire "homme localtime")

La raison en est que les jours / années sont leurs propres entiers, tandis que les mois (en tant que #) sont les index d'un tableau qui, dans la plupart des langues - en particulier C où l'appel sous-jacent est implémenté sous Unix - commence par 0.

-2voto

peter Points 1
date1 = new Date();
//year, month, day [, hrs] [, min] [, sec]
date1 = new Date.UTC(date1.getFullYear(),date1.getMonth()+1,date1.getDate(),date1.getHours(),date1.getMinutes(),date1.getSeconds());

date2 = new Date();
date2 = date2.getTime();

alert(date1)
alert(date2)

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