JavaScript getDate ritorna data sbagliata
-
21-09-2019 - |
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?
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