¿Por qué este javascript devuelve 108 en lugar de 2008? ¿Obtiene el día y el mes correctos pero no el año?
myDate = new Date();
year = myDate.getYear();
año = 108?
year = myDate.getFullYear() % 100;
¿Por qué este javascript devuelve 108 en lugar de 2008? ¿Obtiene el día y el mes correctos pero no el año?
myDate = new Date();
year = myDate.getYear();
año = 108?
year = myDate.getFullYear() % 100;
Respuestas:
Es una cosa del año 2000 , solo se cuentan los años desde 1900.
Ahora hay problemas de compatibilidad potenciales que getYear()han quedado obsoletos en favor de getFullYear(), desde quirksmode :
Para hacer el asunto aún más complejo, date.getYear () está obsoleto hoy en día y debería usar date.getFullYear (), que, a su vez, no es compatible con los navegadores más antiguos. Sin embargo, si funciona, siempre debe dar el año completo, es decir. 2000 en lugar de 100.
Su navegador le da los siguientes años con estos dos métodos:
* The year according to getYear(): 108
* The year according to getFullYear(): 2008
También hay diferencias de implementación entre Internet Explorer y Firefox, ya que la implementación de IE de getYear()se cambió para comportarse como getFullYear()- de IBM :
Según la especificación de ECMAScript, getYear devuelve el año menos 1900, originalmente destinado a devolver "98" para 1998. getYear quedó obsoleto en ECMAScript Versión 3 y se reemplazó por getFullYear ().
Internet Explorer cambió getYear () para que funcione como getFullYear () y lo haga compatible con Y2k, mientras que Mozilla mantuvo el comportamiento estándar.
Dado que getFullYear no funciona en navegadores antiguos, puede usar algo como esto:
Date.prototype.getRealYear = function()
{
if(this.getFullYear)
return this.getFullYear();
else
return this.getYear() + 1900;
};
El prototipo de Javascript se puede usar para extender objetos existentes, al igual que los métodos de extensión de C #. Ahora, podemos simplemente hacer esto;
var myDate = new Date();
myDate.getRealYear();
// Outputs 2008
Consulte los documentos. No es un problema del Y2K, ¡es una falta de un problema del Y2K! Esta decisión se tomó originalmente en C y se copió en Perl, aparentemente JavaScript y probablemente en varios otros lenguajes. Hace mucho tiempo, aparentemente todavía se sentía deseable usar años de dos dígitos, pero sorprendentemente, quien diseñó esa interfaz tuvo suficiente previsión para darse cuenta de que necesitaban pensar en lo que sucedería en el año 2000 y más allá, así que en lugar de solo proporcionar los dos últimos dígitos, proporcionaron el número de años desde 1900. Podrías usar los dos dígitos, si tienes prisa o quieres arriesgar. O si desea que su programa continúe funcionando, puede agregar 100 al resultado y usar años completos de cuatro dígitos.
Recuerdo la primera vez que hice manipulación de citas en Perl. Curiosamente leí los documentos . Aparentemente esto no es algo común. Un año o dos después me llamaron a la oficina el 31 de diciembre de 1999 para arreglar un error que había sido descubierto en el último minuto posible en algún código Perl de contrato, cosas con las que nunca había tenido nada que ver. Fue exactamente este problema: la fecha estándar devolvió años desde 1900, y los programadores lo trataron como un año de dos dígitos. (Supusieron que obtendrían "00" en 2000.) Como programador joven y sin experiencia, me sorprendió que hubiéramos pagado tanto extra por un trabajo "profesional", y esas personas ni siquiera se habían molestado en leer el documentación. Fue el comienzo de muchos años de desilusión; ahora soy viejo y cínico. :)
En el año 2000, la conferencia anual de YAPC Perl se denominó "YAPC 19100" en honor a este error que a menudo se informa.
Hoy en día, al menos en el mundo de Perl, tiene más sentido usar un módulo estándar para el manejo de fechas, uno que usa años reales de cuatro dígitos. No estoy seguro de qué podría estar disponible para JavaScript.
Debe devolver el número de años desde el año 1900.
utilizar date.getFullYear().
Esto es (como se señaló correctamente en otro lugar) es una cosa del año 2000. Netscape (escrito antes de 2000) regresó originalmente, por ejemplo, 98de getYear(). En lugar de volver a 00, regresó 100para el año 2000. Luego aparecieron otros navegadores y lo hicieron de manera diferente, y todos estaban descontentos porque reinaba la incompatibilidad.
Los navegadores posteriores son compatibles getFullYearcomo método estándar para devolver el año completo.
¡Esta pregunta es tan antigua que me hace llorar de nostalgia por los días de las puntocom!
Así es, Date.getYear () devuelve el número de años desde 1900, al igual que localtime () de Perl. Uno se pregunta por qué un lenguaje diseñado en la década de 1990 no representaría el cambio de siglo, pero ¿qué puedo decir? Había que estar allí. En cierto modo tenía sentido en ese momento (como lo hizo pets.com).
Antes de 2000, uno podría haber tenido la tentación de corregir este error agregando "19" al resultado de getYear (), lo que resultó en el "error del año 19100" . Otros ya han respondido suficientemente esta pregunta (agregue 1900 al resultado de getDate ()).
¿Quizás el libro que estás leyendo sobre JavaScript sea un poco antiguo?
¡Gracias por la explosión del pasado!
Como se señaló, nunca debe usar getYear(), sino usar getFullYear().
Sin embargo, la historia no es tan simple como "IE implementa GetYear()como getFullYear(). Opera e IE en estos días tratan getYear()como getYear()se especificó originalmente para fechas anteriores a 2000, pero lo tratarán como getFullYear()para fechas posteriores a 2000, mientras que webkit y Firefox mantienen el comportamiento anterior
Esto genera 99 en todos los navegadores:
javascript:alert(new Date(917823600000).getYear());
Esto genera 108 en FF / WebKit y 2008 en Opera / IE:
javascript:alert(new Date().getYear());
Es tonto. Se remonta a los días anteriores al año 2000 y ahora solo devuelve el número de años desde 1900 por motivos heredados. Utilice getFullYear () para obtener el año real.
El número que obtiene es el número de años desde 1900. No me pregunte por qué ...
Como han dicho otros, devuelve el número de años desde el año 1900. La razón por la que hace que es que cuando JavaScript fue inventado a mediados de los años 90, que el comportamiento era a la vez conveniente y consistente con las API de fecha y hora en otros idiomas. Particularmente C. Y, por supuesto, una vez que se estableció la API, no pudieron cambiarla por razones de compatibilidad con versiones anteriores.
Por cierto, diferentes navegadores pueden devolver resultados diferentes, por lo que es mejor omitir esta función por completo y usar getFullYear () siempre.
var date_object = nueva fecha (); var year = date_object.getYear (); if (año <2000) {año = año + 1900; } // obtendrás el año completo ...