Pregunta

La siguiente secuencia de comandos devuelve 20 en lugar de 21!

var d = new Date("2010/03/21");
document.write(d.getDate());

¿Qué estoy haciendo mal? Es esto un error de JavaScript?

¿Fue útil?

Solución

El método Date.parse depende de la implementación (new Date(string) es equivalente a Date.parse(string) ).

Mientras que este formato estará disponible en los navegadores modernos, puede no ser 100% seguro de que el navegador interpretará exactamente el formato deseado.

Yo le recomendaría a manipular su cadena, y utilizar el constructor fecha con los argumentos año, mes y día:

// parse a date in yyyy-mm-dd format
function parseDate(input) {
  var parts = input.match(/(\d+)/g);
  // new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])
  return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
}

Otros consejos

Es una cuestión de ahorro de luz diurna tiempo, porque Fecha () utiliza hora local.

Yo vivo en Brasil y Oct-21-2012 es el comienzo de tiempo en la mayor parte de mi país de verano, por lo que las fechas locales en Oct-21-2012 entre 0: 0 y 1: 0 no existe en Brasil!

Algunas personas comentan aquí que funciona. Esto ocurre porque el retorno hora bien o mal depende del país de usuario local.

Ver: http://www.timeanddate.com/news/ tiempo / brasil-DST-2012.html

En Brasil, en 2012 Java piensa que el horario de verano comienza en Oct-14 (en realidad empezar a 1 semana más tarde)

var dt = new Date(2012,9,14); 
alert(dt.getHours());

produce 1 y

Ver: http://www.timeanddate.com/time/dst/2013. html

La solución es utilizar el tiempo UTC (Tiempo Universal Coordinado), porque no hay ningún cambio de Horario de verano y se utiliza una especie de tiempo abstracto. En las aplicaciones más prácticas que no hay problema.

var dt = new Date( Date.UTC(2012, 9, 21, 8, 5, 12));
alert( (dt.getUTCMonth()+1) + '/' + dt.getUTCDate() + '/' + 
        dt.getUTCFullYear() + " " + dt.getUTCHours()+ ':' + 
        dt.getUTCMinutes() + ':' + dt.getUTCSeconds() );

es más fácil si alguien no utiliza las horas, minutos y segundos, basta con colocar un mayor valor de la hora ficticia o igual a 1, como he mostrado anteriormente.

Hay alguna posibilidad de que está tratando el argumento de cadena como UTC y el objeto resultante como Date hora local, o viceversa? Eso podría tirarlo fuera. Comparar d.getDate() a d.getUTCDate().

también consigo una desviación con un día a través getDate(), pero observo que getUTCDate() devuelve el valor esperado. El problema se ha visto en FF 3.6.12, pero el mismo código que se ejecuta en Chrome estaba bien.

Mi código de depuración:

var date="2010-11-04";
alert(date);
var d = new Date(date)
alert(d.toDateString()+": "+ d.getDate()+" UTC "+d.getUTCDate());

Esto dio una salida (FireFox):

  

Wed Nov 03 2010: 3 4 UTC

Chrome está muy bien. Por lo que algo es en algún lugar - tal vez un error, pero es más probable un problema de parámetro de zona horaria / UTC. Me recuerda a cuando date() PHP devolverá 23 horas en un día si la zona horaria cambió ese día, etc. Buggered si sé lo que es, sin embargo.

Me escribió el siguiente código en la barra de direcciones del navegador y el resultado fue 21

javascript:alert(new Date("2010/03/21").getDate())

No existe tal cosa como un error de Javascript, ya que hay muchas implementaciones de Javascript, por lo que querrá hacer referencia a una aplicación específica.

La aplicación que probé era Chrome 4.1.249. Cuál es la tuya?

Es el huso horario que juega un papel importante aquí. La función Date() añadirá su zona horaria a la fecha de la cual está dando como una entrada. Por ejemplo: di la entrada como esta:

alert(new Date("2018-09-15"));

El resultado para mí es: Dom Dic 15 2018 05:30:00 GMT + 0530 (Hora estándar de India)

Se añade el +05:30 zona horaria a la hora de mi entrada (se puede ver en el result..05 arriba: 30:. 00 se añade a la fecha Ahora lo que estoy diciendo es si se encuentra en la zona horaria de menos de 0 [países como Brasil, México, Chile, etc ... ¿tiene zona horaria inferior a 0] entonces se sumará a su fecha de entrada (por ejemplo: zona horaria es GMT-05:. 00 será restar -5: 00 a partir de la fecha dado.

VahidN , tienes el resultado 20 porque usted está en la zona horaria inferior a 0 (-1è :00`, etc. ..)

La solución es restablecer su zona horaria a 0 . De esta manera:
    Fecha. ( "2010-03-21T00: 00: 00")

Probé este código en Firefox 3.6 y IE 8:

<script type="text/javascript">

var d = new Date("2010/03/21");
document.write(d.getDate());

</script> 

Se muestra la fecha correcta: 21

Para más información véase: JavaScript Fecha Objeto

También puede leer sobre consideraciones de compatibilidad JavaScript en Wikipedia.

http://jsbin.com/aqoki3/edit - aquí con código que envió consigo 21. Por lo que su fallo no JS. Tal vez su error en su aplicación de navegador (de JS).
Así que para inicializar correctamente su fecha var uso new Date(year, month, date [, hour, minute, second, millisecond ]) ( https: //developer.mozilla. org / es / Core_JavaScript_1.5_Reference / Objetos / Fecha ). De esta manera usted estará seguro de que el día 21 es lástima pues se establece implícitamente a 21.

Me da la misma fecha (21) en FIRFOX, Safari, Chrome, Opera e IE, si utilizo la cadena "03/21/2010" o los argumentos de fecha número entero (2010,2,21).

Estoy utilizando una máquina de las ventanas y las nuevas versiones de los navegadores -

puede probar para ver si su cliente analiza una fecha diferente de la cadena, que es el único lugar que veo un problema.

if(new Date("2010/03/21")- new Date(2010,2,21)){
alert(new Date("2010/03/21"));
} 

Asegúrese de que el número de meses que está utilizando es -1, Si usted está buscando en junio que hay que hacer (6-1) en el mes, al crear

   var date_obj = new Date(y,(m-1),d);

Al dar nueva fecha una fecha de cadena, la cadena necesita incluir la zona horaria, de lo contrario se interpreta de manera diferente desde el navegador a otro (debido a las diferentes implementaciones de JavaScript) y de máquina a otra (por la diferencia de la zona horaria local )

new Date('2017-07-31T10:00:00-0500');

en lugar de

new Date('2017-07-31T10:00:00');

cant't crear objeto Date pasando argumento de cadena como muestra la fecha.

Crea gusta esta manera.

var str_date = "2010/03/21";
var date = new Date();
var date_elements = str_date.split("/");

date.setYear(date_elements[0]);
date.setMonth(date_elements[1]);
date.setDay(date_elements[2]);

alert(date.toString);

prestar atención en el método date.toString. devuelve cadena de fecha completa. date.getDate sólo le dará día de ese día.

Para obtener más información del objeto Date, consulte www.w3school.com

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top