2011-01-21 5 views
150

Ho questo javascript per impostare automaticamente un filtro data per il primo e l'ultimo giorno del mese precedente:Javascript date.getYear() restituisce 111 nel 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); 
}); 

MA now.getYear() sta tornando 111 al posto del previsto 2011. C'è qualcosa di ovvio che ho perso?

+27

Sei apparentemente la prima vittima del baco Y2K. Suggerisco di tornare indietro nel tempo e gongolare. –

+0

Come sai che sta restituendo 111? Hai provato semplicemente a fare un alert() dopo la riga "var now = new Date()"? – kvista

+1

@Kelly Provalo nella tua console Javascript preferita. – deceze

risposta

255

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

getYear non più utilizzato ed è stato sostituito dal metodo getFullYear.

Il metodo getYear restituisce l'anno meno 1900; quindi:

  • Per anni maggiore o uguale a 2000, il valore restituito da getYear è 100 o maggiore. Ad esempio, se l'anno è 2026, getYear rendimenti 126.
  • per anni tra e tra 1900 e il 1999, il valore restituito da getYear è compreso tra 0 e 99. Per esempio, se l'anno è 1976, getYear rendimenti 76.
  • Per anni meno di 1900, il valore restituito da getYear è inferiore a 0. Ad esempio, se l'anno è 1800, getYear restituisce -100.
  • Per tenere conto degli anni precedenti e successivi al 2000, è necessario utilizzare getFullYear anziché getYear in modo che l'anno sia specificato per intero.
+0

Grande, funziona, risolto uno dei miei script decennali! :) – ymasood

+22

Y2K colpisce ancora !! – MrDustpan

+3

Non riesco a credere che una risposta copy-n-paste del manuale abbia ottenuto 31 upvotes (al momento della scrittura). Indovina che mostra quanto sia comune questo problema e che nessuno RTFM ...; o) – deceze

30

Al fine di conformarsi alle precedenti boneheaded, getYear() restituisce il numero di anni a partire dal 1900.

Invece, si dovrebbe chiamare getFullYear(), che restituisce l'anno attuale.

+1

Sono curioso dei dettagli di questo precedente più sconcertante –

+0

@StevenLu: Vedi gli orrori dell'API Java Date originale – SLaks

+2

Wow. Deprecato nell'API Java nel 1997. Non solo 1997, * Febbraio * 1997 ... prima del 1997, ho addirittura iniziato ... Sapete, pensavo che Javascript non fosse realmente connesso a Java ... –

4

Da quello che ho letto sulle pagine JS di Mozilla, getYear è deprecato. Come sottolineato più volte, getFullYear() è la strada da percorrere. Se vuoi davvero usare getYear() aggiungi 1900 ad esso.

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