2011-12-01 12 views

Respuesta

9

No, esto es al revés: está definiendo la fecha como si fuera enero.

Ver the documentation on Date():

meses - Valor entero que representa el mes, comenzando con 0 de enero al 11 de diciembre.

Proporcionó 12, por lo que se trató como 0 (enero).

Si necesita una prueba , vea modified version of the script, showing the whole date and time.

+0

¡Gracias! OMG Soy un retrasado, también, me he dado cuenta de que supera el 24 en lugar del 25 es porque la marca de tiempo es 00:00? – Baconbeastnz

+0

@ Baconbeastnz: Creo que este problema específico es el resultado de lo siguiente: está creando una fecha como la hora local, pero está produciendo el día UTC. Ver [resultado detallado para UTC y hora local con horas incluidas] (http://jsfiddle.net/3CpXz/12/). ¿Ayudó? – Tadeck

+0

@Baconbeastnz: Básicamente estás en algún lugar del hemisferio oriental y debido a eso, el tiempo UTC es realmente más temprano (si pudieras decir eso). – Tadeck

2

Diciembre tiene 11 en el objeto Fecha. Tendrás que restar 1 para que sea 0-indexado.

http://www.w3schools.com/jsref/jsref_getutcmonth.asp

+2

Sugeriría su respuesta, ya que apunta a OP en la dirección correcta (como la respuesta de @Gabe y la mía), pero no lo haré debido a la fuente de información a la que hizo referencia. Consulte [W3Fools.com] (http://w3fools.com/) para obtener una explicación detallada y los motivos. – Tadeck

+0

Sigue siendo exacto: P – jzila

+0

No, no lo está, creo :) Consulte [Fecha de documentación de objetos] (http://www.w3schools.com/jsref/jsref_obj_date.asp) y [JS Date tutorial de objetos] (http: //www.w3schools.com/js/js_obj_date.asp) - ** ninguno ** de ellos en realidad menciona que 'new Date()' debe dar el número del mes que comienza con '0' para enero (y' 11' para diciembre). El enlace que ha proporcionado menciona solo valores correctos para 'getUTCMonth()', no para el constructor del objeto Date. Ese enlace incluso tiene 'var month = new Array (12);' en su ejemplo, que no es una buena práctica. W3Schools está lleno de imprecisiones :( – Tadeck

7

¿Se dio cuenta de que se imprime 2012 para el año? El problema es que usa un mes basado en 0, por lo que cree que el mes 12 de este año es en realidad el mes 0 del próximo año. En otras palabras, 0 es enero y 11 es diciembre, entonces 12 es el próximo enero.

debe restar 1 a partir del mes legible:

var d = new Date(exploded[0], exploded[1] - 1, exploded[2]); 

Si cambio el programa a esto:

var exploded = "2011-12-25".split('-'); 
var d = new Date(exploded[0], exploded[1] - 1, exploded[2]); 
document.write(d.toString()); 

Imprime: Sun Dec 25 00:00:00 EST 2011

+0

eso es year2011 month11 day24 que también es erróneo:/ – Baconbeastnz

+0

de hecho si lo modifico http://jsfiddle.net/3CpXz/, incluso solo aString() está fallando – Baconbeastnz

+1

@Baconbeastnz Eso es porque 'getUTCMonth 'también es 0-11. Probar:' "mes" + (d.getUTCMonth() + 1) ' –