2011-01-21 8 views
150

tengo unas pocas cosas Javascript para configurar automáticamente un filtro de fecha para el primer y último día del mes anterior:Javascript date.getYear() devuelve 111 en 2011?

$(document).ready(function() { 
    $("#DateFrom").datepicker({ dateFormat: 'dd/mm/yy' }); 
    $("#DateTo").datepicker({ dateFormat: 'dd/mm/yy' }); 

    var now = new Date(); 
    var firstDayPrevMonth = new Date(now.getYear(), now.getMonth() - 1, 1); 
    var firstDayThisMonth = new Date(now.getYear(), now.getMonth(), 1); 
    var lastDayPrevMonth = new Date(firstDayThisMonth - 1); 

    $("#DateFrom").datepicker("setDate", firstDayPrevMonth); 
    $("#DateTo").datepicker("setDate", lastDayPrevMonth); 
}); 

PERO now.getYear() está volviendo 111 en lugar de la esperada 2011. ¿Hay algo obvio que me he perdido?

+27

Aparentemente eres la primera víctima del virus Y2K. Sugiero retroceder en el tiempo y regodearse. –

+0

¿Cómo sabes que está devolviendo 111? ¿Intentó simplemente hacer una alerta() después de la línea "var now = new Date()"? – kvista

+1

@Kelly Pruébalo en tu consola Javascript preferida. – deceze

Respuesta

255

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/getYear

getYear ya no se utiliza y se ha sustituido por el método getFullYear.

getYear El método devuelve el año menos 1900; así:

  • Para años mayores o iguales a 2000, el valor devuelto por getYear es 100 o mayor. Por ejemplo, si el año es 2026, getYear vuelve 126.
  • Durante años y entre 1900 y 1999, incluyendo, el valor devuelto por getYear está entre 0 y 99. Por ejemplo, si el año es 1976, getYear retornos 76.
  • Durante años inferior a 1900, el valor devuelto por getYear es menor que 0. por ejemplo, si el año es 1800, getYear devuelve -100.
  • tener en cuenta años antes y después de 2000, se debe utilizar en lugar de getFullYeargetYear de manera que el año se especifica en su totalidad.
+0

Grande, obras, fijo uno de mis guiones de diez años! :) – ymasood

+22

Y2K ataca de nuevo !! – MrDustpan

+3

No puedo creer que una respuesta de copiar y pegar del manual obtuviera 31 votos ascendentes (al momento de escribir). Supongo que muestra qué tan común es este problema y que nadie RTFM ...; o) – deceze

30

Con el fin de cumplir con los precedentes boneheaded getYear(), devuelve el número de años desde el año 1900.

En su lugar, usted debe llamar a getFullYear(), que devuelve el año real.

+1

Tengo curiosidad acerca de los detalles de este precedente más desconcertante –

+0

@StevenLu: Ver los horrores del original de Java API Fecha – SLaks

+2

Wow. Obsoleto en la API de Java en 1997. No sólo 1,997, * febrero Preferencias: * 1997 ... antes de 1997 en realidad ni siquiera se puso en marcha ... Ya sabes, pensé Javascript en realidad no estaba conectado a Java ... –

4

Por lo que he leído en las páginas JS de Mozilla, getYear está en desuso. Como se señaló muchas veces, getFullYear() es el camino a seguir. Si realmente quieres usar getYear() agrega 1900 a él.

var now = new Date(), 
    year = now.getYear() + 1900; 
Cuestiones relacionadas