2011-04-23 5 views
8

Al parecer, el método de Javascript objeto de fecha getYear() devuelve resultado diferente entre IE8 y Firefox3.6 (tengo los 2 en mi máquina, no está seguro de otro navegador o la versión)javascript date getYear() devuelve resultados diferentes entre IE y Firefox, ¿cómo abordar esto?

Date d = new Date(); 
alert(d.getYear()); 

FF3.6 ==> 111 (year since 1900? i guess) 
IE8 ===> 2011 

He estado probando solamente en Firefox y ahora mi código Javascript que ajusta el valor devuelto de getYear() ahora me está dando 3911 debido a mi codificación.

var modified = d.getYear() + 1900 

En Firefox devuélvalo 2011. Pero si aplico este enfoque en IE8, devuélvalo 3911.

pude añadir lógica para distinguir IE y Firefox, pero no quiero añadir tal si/más en todas partes en mi código dondequiera que haya partes dependientes del navegador como esta. ¿Hay alguna otra forma de abordar este problema?

var browserName=navigator.appName; 

if (browserName=="Netscape") { 
    var modified = d.getYear() + 1900 
} 
else if(browserName=="Microsoft Internet Explorer") { 
    var modified = d.getYear(); 
} 
+0

posible duplicado de [¿Por qué Javascript getYear() devuelve 108?] (Http://stackoverflow.com/questions/98124/why-does-javascript-getyear-return-108) –

+0

* "año desde 1900? I adivina "* ¿Por qué adivinar? La especificación está disponible gratuitamente: http://www.ecma-international.org/publications/standards/Ecma-262.htm –

+0

thx para el enlace que voy a echar un vistazo. –

Respuesta

19

Uso .getFullYear() en lugar de .getYear()

+4

Firefox está haciendo * exactamente * lo que la especificación dice que debería hacer. –

+1

'getYear' es compatible con y2k, ya que el resultado no está limitado a dos dígitos. Por ejemplo, devolverá 112 para 2012, no 12. Es algo unixy. – ikegami

8

tratar de utilizar getFullYear() en lugar getYear

+0

Su respuesta fue primero, ¡pero no fue marcada como la respuesta! Odio cuando eso sucede ... –

+1

esto está bien Mikey G ... ya que el objetivo siempre es resolver el OP y compartir la experiencia/aprendizaje. ;) –

2

Uso Date.getFullYear();

bla .. tengo respuesta con al menos 30 caracteres ...

4

Si IE8 le está dando de 2011, Es un error en IE8 (y anteriormente, consulte la actualización a continuación). getYear se define en the specification (Sección B.2.4) como siendo:

  1. Vamos t sea este valor de tiempo.
  2. Si t es NaN, return NaN.
  3. Devuelve YearFromTime(LocalTime(t)) − 1900.

Por lo tanto, en este momento, 111 es el valor correcto. Esa definición no ha cambiado desde la 3ª edición, entonces estamos hablando ~ 12 años de comportamiento específico.

Como han dicho otros, utilizar getFullYear para obtener un valor más útil, pero eso es un error de IE8 si es verdad como usted dice (no tengo IE8 útil para comprobar).


actualización: Bueno, yo estaré. Acabo de probarlo, y Microsoft lo hizo obtenerlo mal. IE6, IE7 e IE8 dicen "2011". La buena noticia es que finalmente lo arreglaron, IE9 dice "111" como debería. Puede probarlo en su navegador aquí: http://jsbin.com/ofuyi3

+0

Muy interesante ... sí me está dando 2011 en IE8 –

4

No confíe en las versiones del producto cuando no sea necesario. En cambio, confíe en la diferencia que desea corregir por sí mismo.Si quería getYear 's valor correcto, se puede obtener usando

Date d = new Date(); 
var year = d.getYear(); 
if (year < 1900) { // Should always be true, but isn't in older IE. 
    year += 1900; 
} 

realizo personas han sugerido una mejor manera de conseguir el resultado , pero pensé que la pregunta real valía la pena responder.

Cuestiones relacionadas