Domanda

Lo script che segue restituisce 20 invece di 21!

var d = new Date("2010/03/21");
document.write(d.getDate());

Che cosa sto facendo di sbagliato? Questo è un bug JavaScript?

È stato utile?

Soluzione

Il metodo Date.parse dipende dall'implementazione (new Date(string) è equivalente a Date.parse(string) ).

Anche se questo formato sarà disponibile sul browser moderni, non si può essere sicuri al 100% che il browser interpreterà esattamente il formato desiderato.

ti consiglierei di manipolare la stringa, e utilizzare la data di costruzione con l'anno, mese e giorno argomenti:

// parse a date in yyyy-mm-dd format
function parseDate(input) {
  var parts = input.match(/(\d+)/g);
  // new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])
  return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
}

Altri suggerimenti

E 'un problema legale di tempo, perché Date () utilizza l'ora locale.

Io vivo in Brasile e Ott-21-2012 è l'inizio di ora legale nella maggior parte del mio paese risparmio, date in modo locali presso Ott-21-2012 tra 0: 0 e 1: 0 non esiste in Brasile!

Alcune persone commento qui che funziona. Succede perché il ritorno all'ora giusta o sbagliata dipende dal paese utente locale.

See: http://www.timeanddate.com/news/ tempo / Brasile-DST-2012.html

In Brasile, nel 2012, Java pensa che l'ora legale inizia alle Ott-14 (in realtà iniziano da 1 settimana più tardi)

var dt = new Date(2012,9,14); 
alert(dt.getHours());

produce 1 e

See: http://www.timeanddate.com/time/dst/2013. html

La soluzione è usare UTC (Coordinated Universal Time) il tempo, perché non v'è alcun cambiamento dell'ora legale e si utilizza una sorta di tempo astratto. Nelle applicazioni più pratiche non c'è nessun problema.

var dt = new Date( Date.UTC(2012, 9, 21, 8, 5, 12));
alert( (dt.getUTCMonth()+1) + '/' + dt.getUTCDate() + '/' + 
        dt.getUTCFullYear() + " " + dt.getUTCHours()+ ':' + 
        dt.getUTCMinutes() + ':' + dt.getUTCSeconds() );

è più facile se qualcuno non fa uso di ore, minuti e secondi, è sufficiente posizionare un manichino maggior valore un'ora o uguale a 1, come ho mostrato sopra.

Ogni possibilità è trattare l'argomento stringa come UTC e l'oggetto Date risultante come ora locale, o viceversa? Questo potrebbe gettarlo via. Confronta d.getDate() a d.getUTCDate().

Ho anche una deviazione di un giorno per getDate(), ma rilevo che getUTCDate() restituisce il valore atteso. Il problema è stato visto in FF 3.6.12, ma lo stesso codice in esecuzione su Chrome andava bene.

Il mio codice di debug:

var date="2010-11-04";
alert(date);
var d = new Date(date)
alert(d.toDateString()+": "+ d.getDate()+" UTC "+d.getUTCDate());

Questo ha dato un'uscita (FireFox):

  

mer 3 novembre 2010: 3 UTC 4

Chrome è bene. Quindi, qualcosa è da qualche parte - forse un bug, ma più probabilmente un problema di fuso orario parametro / UTC. Mi ricorda dove PHP date() tornerà 23 ore in un giorno, se il fuso orario è cambiato quel giorno ecc Inculata se so di cosa si tratta, però.

ho scritto il seguente codice nella barra degli indirizzi del mio browser e il risultato è stato 21

javascript:alert(new Date("2010/03/21").getDate())

Non c'è cosa come un bug JavaScript, poiché non v'è molte implementazioni Javascript, quindi ti consigliamo di fare riferimento a una specifica implementazione.

L'implementazione che ho provato era Chrome 4.1.249. Ciò che è tuo?

E 'il fuso orario, che svolge un ruolo importante qui. La funzione Date() aggiungerà il fuso orario per la data che si stanno dando come input. Per esempio: ho dato l'input in questo modo:

alert(new Date("2018-09-15"));

Il risultato per me è: Sab 15 Set 2018 05:30:00 GMT + 0530 (India Standard Time)

Il +05:30 fuso orario viene aggiunto al tempo del mio ingresso (si può vedere nella result..05 sopra: 30:. 00 è stato aggiunto alla data Ora quello che sto dicendo è che se ci si trova nel fuso orario inferiore a 0 [paesi come Brasile, Messico, Cile, ecc ... avendo fuso orario inferiore a 0] allora sarà aggiungere al vostro ingresso data (ad esempio: fuso orario è UTC-05:. 00 sarà sottrarre -5: 00 dalla data data.

VahidN , avete ottenuto il 20 risultato perché si è nel fuso orario inferiore a 0 (-1è :00`, etc. ..)

La soluzione è resettare il fuso orario per 0 . Come questo:
    Data. ( "2010-03-21T00: 00: 00")

Ho provato questo codice in Firefox 3.6 e IE 8:

<script type="text/javascript">

var d = new Date("2010/03/21");
document.write(d.getDate());

</script> 

E 'che mostra la data giusta: 21

Per ulteriori informazioni, consultare: JavaScript Object Data

Si può anche leggere su considerazioni di compatibilità JavaScript a Wikipedia.

http://jsbin.com/aqoki3/edit - qui con il codice che avete inviato ottengo 21. Quindi la sua non JS bug. Forse la sua bug nell'implementazione del browser (di JS).
Quindi, per init correttamente la data di var uso new Date(year, month, date [, hour, minute, second, millisecond ]) ( https: //developer.mozilla. org / it / Core_JavaScript_1.5_Reference / oggetti / Data ). In questo modo si sarà sicuro che il giorno è di 21 siccome implicitamente imposta a 21.

Ho la stessa data (21) in Firfox, Safari, Chrome, Opera e IE, se io uso la stringa "2010/03/21" o gli argomenti di data integer (2010,2,21).

Sto usando una macchina Windows e le nuove versioni dei browser -

è possibile verificare per vedere se il client analizza una data diversa dalla stringa, che è l'unico posto che vedo per un problema.

if(new Date("2010/03/21")- new Date(2010,2,21)){
alert(new Date("2010/03/21"));
} 

Assicurati che il mese numero che si sta utilizzando è -1, Se siete alla ricerca di giugno, è necessario fare (6-1) per il mese, quando si crea

   var date_obj = new Date(y,(m-1),d);

Nel dare nuovo Data una data stringa, la stringa necessario includere il fuso orario, altrimenti verrà interpretato in modo diverso da browser a loro (a causa di diverse implementazioni JavaScript) e da macchina a loro (a causa della differenza di fuso orario locale )

new Date('2017-07-31T10:00:00-0500');

anziché

new Date('2017-07-31T10:00:00');

È cant't creare Data oggetto passando argomento stringa spettacoli come data.

Crea piace questo modo.

var str_date = "2010/03/21";
var date = new Date();
var date_elements = str_date.split("/");

date.setYear(date_elements[0]);
date.setMonth(date_elements[1]);
date.setDay(date_elements[2]);

alert(date.toString);

dare attenzione sul metodo di date.toString. restituisce data completa String. date.getDate solo vi darà giorno di quel giorno.

Per ulteriori informazioni dell'oggetto Date, fare riferimento www.w3school.com

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