¿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?
javascript
date
ctrlShiftBryan
fuente
fuente
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 degetFullYear()
, desde quirksmode :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 comogetFullYear()
- de IBM :fuente
Dado que getFullYear no funciona en navegadores antiguos, puede usar algo como esto:
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;
fuente
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.
fuente
Debe devolver el número de años desde el año 1900.
fuente
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,
98
degetYear()
. En lugar de volver a00
, regresó100
para 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
getFullYear
como método estándar para devolver el año completo.fuente
¡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!
fuente
Como se señaló, nunca debe usar
getYear()
, sino usargetFullYear()
.Sin embargo, la historia no es tan simple como "IE implementa
GetYear()
comogetFullYear()
. Opera e IE en estos días tratangetYear()
comogetYear()
se especificó originalmente para fechas anteriores a 2000, pero lo tratarán comogetFullYear()
para fechas posteriores a 2000, mientras que webkit y Firefox mantienen el comportamiento anteriorEsto genera 99 en todos los navegadores:
Esto genera 108 en FF / WebKit y 2008 en Opera / IE:
fuente
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.
fuente
Estoy usando
date.getUTCFullYear()
; trabajando sin problemas.fuente
El número que obtiene es el número de años desde 1900. No me pregunte por qué ...
fuente
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.
fuente
Por cierto, diferentes navegadores pueden devolver resultados diferentes, por lo que es mejor omitir esta función por completo y usar getFullYear () siempre.
fuente
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 ...
fuente
está regresando el año de 4 dígitos: 1900, que puede haber sido genial hace más de 9 años, pero ahora está bastante retrasado. Java.util.Date de Java también hace esto.
fuente