Domanda

Perché questo JavaScript restituisce 108 invece di 2008?ottiene il giorno e il mese corretti ma non l'anno?

myDate = new Date();
year = myDate.getYear();

anno = 108?

È stato utile?

Soluzione

È un Anno 2000 cosa, si contano solo gli anni dal 1900.

Ora ci sono potenziali problemi di compatibilità getYear() è stato deprecato a favore di getFullYear() - da quirksmode:

Per rendere la questione ancora più complessa, date.getYear() è oggigiorno deprecato e dovresti utilizzare date.getFullYear(), che, a sua volta, non è supportato dai browser più vecchi.Se funziona, tuttavia, dovrebbe sempre indicare l'anno completo, ad es.2000 invece di 100.

Il tuo browser fornisce i seguenti anni con questi due metodi:

* The year according to getYear(): 108
* The year according to getFullYear(): 2008

Esistono anche differenze di implementazione tra Internet Explorer e Firefox, come l'implementazione di IE getYear() è stato cambiato per comportarsi come getFullYear() - da IBM:

Secondo la specifica ECMAScript, getYear restituisce l'anno meno 1900, originariamente destinato a restituire "98" per il 1998.getYear è stato deprecato in ECMAScript versione 3 e sostituito con getFullYear().

Internet Explorer ha modificato getYear() affinché funzionasse come getFullYear() e lo rendesse compatibile con Y2k, mentre Mozilla ha mantenuto il comportamento standard.

Altri suggerimenti

Poiché getFullYear non funziona nei browser meno recenti, puoi utilizzare qualcosa del genere:

Date.prototype.getRealYear = function() 
{ 
    if(this.getFullYear)
        return this.getFullYear();
    else
        return this.getYear() + 1900; 
};

Il prototipo Javascript può essere utilizzato per estendere oggetti esistenti, proprio come i metodi di estensione C#.Ora possiamo semplicemente fare questo;

var myDate = new Date();
myDate.getRealYear();
// Outputs 2008

Controlla i documenti.Non è un problema dell'anno 2000: è la mancanza di un problema dell'anno 2000!Questa decisione è stata presa originariamente in C ed è stata copiata in Perl, apparentemente in JavaScript, e probabilmente in molti altri linguaggi.Molto tempo fa apparentemente era ancora ritenuto desiderabile utilizzare anni a due cifre, ma sorprendentemente chiunque abbia progettato quell'interfaccia ha avuto abbastanza lungimiranza da rendersi conto che doveva pensare a cosa sarebbe successo nell'anno 2000 e oltre, quindi invece di fornire solo le ultime due cifre cifre, fornivano il numero di anni dal 1900.Potresti usare le due cifre, se avevi fretta o volevi correre rischi.Oppure, se desideri che il tuo programma continui a funzionare, potresti aggiungere 100 al risultato e utilizzare anni a quattro cifre a tutti gli effetti.

Ricordo la prima volta che ho eseguito la manipolazione delle date in Perl.Stranamente io leggere i documenti.Apparentemente questa non è una cosa comune.Un anno o due dopo fui chiamato in ufficio, il 31 dicembre 1999, per correggere un bug che era stato scoperto all'ultimo minuto possibile in un codice Perl contrattuale, cose con cui non avevo mai avuto niente a che fare.Era esattamente questo il problema:la chiamata di data standard restituiva gli anni dal 1900 e i programmatori lo trattavano come un anno a due cifre.(Davano per scontato che avrebbero ottenuto "00" nel 2000.) Essendo un giovane programmatore inesperto, mi lasciava a bocca aperta il fatto che avessimo pagato così tanto extra per un lavoro "professionale", e quelle persone non si fossero nemmeno prese la briga di leggere il documentazione.Fu l'inizio di molti anni di disillusione;ora sono vecchio e cinico.:)

Nell'anno 2000, la conferenza annuale YAPC Perl venne chiamata "YAPC 19100" in onore di questo non-bug spesso segnalato.

Al giorno d'oggi, almeno nel mondo Perl, ha più senso usare un modulo standard per la gestione delle date, uno che usi anni reali a quattro cifre.Non sono sicuro di cosa potrebbe essere disponibile per JavaScript.

Deve restituire il numero di anni a partire dall'anno 1900.

utilizzo date.getFullYear().

Questa è (come giustamente sottolineato altrove) una questione Y2K.Netscape (scritto prima del 2000) restituiva originariamente, ad esempio 98 da getYear().Piuttosto che tornare a 00, è invece tornato 100 per l'anno 2000.Poi sono arrivati ​​altri browser e hanno fatto diversamente, e tutti erano scontenti perché regnava l'incompatibilità.

Sono supportati i browser successivi getFullYear come metodo standard per restituire l'anno completo.

Questa domanda è così vecchia che mi fa piangere di nostalgia per i tempi delle dotcom!

Esatto, Date.getYear() restituisce il numero di anni dal 1900, proprio come localtime() di Perl.Viene da chiedersi perché un linguaggio concepito negli anni Novanta non tenga conto del fatturato del secolo, ma cosa posso dire?Dovevi essere lì.In quel momento aveva un senso (come ha fatto Pets.com).

Prima del 2000, si sarebbe potuto essere tentato di correggere questo bug aggiungendo "19" al risultato di getYear() con conseguente "cimice anno 19100".Altri hanno già risposto sufficientemente a questa domanda (aggiungi 1900 al risultato di getDate()).

Forse il libro che stai leggendo su JavaScript è un po' vecchio?

Grazie per il tuffo nel passato!

Come sottolineato, non dovresti mai usarlo getYear(), ma usa invece getFullYear().

La storia tuttavia non è così semplice come "IE implementa GetYear() COME getFullYear().Opera e IE trattano in questi giorni getYear() COME getYear() è stato originariamente specificato per le date precedenti al 2000, ma lo tratterà come getFullYear() per le date successive al 2000, mentre webkit e Firefox mantengono il vecchio comportamento

Questo restituisce 99 in tutti i browser:

javascript:alert(new Date(917823600000).getYear());

Questo restituisce 108 in FF/WebKit e 2008 in Opera/IE:

javascript:alert(new Date().getYear());

È stupido.Esso risale a giorni precedenti all'anno 2000, e ora restituisce solo il numero di anni trascorsi dal 1900 per motivi ereditari.Utilizzare getFullYear() per ottenere l'anno effettivo.

sto usando date.getUTCFullYear();lavorando senza problemi.

Il numero che ottieni è il numero di anni dal 1900.Non chiedermi perché..

Come altri hanno già detto, restituisce il numero di anni dal 1900.Il motivo per cui lo fa Quello è che quando JavaScript fu inventato a metà degli anni '90, quel comportamento era conveniente e coerente con le API data-ora in altri linguaggi.In particolare C.E, naturalmente, una volta stabilita l'API, non è stato possibile modificarla per motivi di compatibilità con le versioni precedenti.

A proposito, browser diversi potrebbero restituire risultati diversi, quindi è meglio saltare del tutto questa funzione e utilizzare sempre getFullYear().

var date_object=nuova data();var anno = date_object.getYear();if (anno <2000) {anno = anno + 1900;} // Avrai l'intero anno ....

restituisce l'anno a 4 cifre: 1900, che potrebbe essere stato interessante più di 9 anni fa, ma ora è piuttosto ritardato.Anche java.util.Date di Java fa lo stesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top