2013-05-22 11 views
11

Ho scritto un codice in Javascript che funzionava senza alcun problema. Ma quando ho inserito la data October 20, 2013, mi è stata restituita la data October 19, 2013.Problemi con la data del 20 ottobre in alcuni anni

Lo stesso vale per gli anni 2019, 2024 e 2030 ( non testato anni precedenti e comunque non).

Questo problema si presenta in tutti i browser che prova ( Google Chrome, Internet Explorer, Mozilla Firefox, Opera e Safari).

quando scrivo:

date = new Date("10/20/2013"); 
document.write(date); 

Il risultato che ottengo è:

Sab 19 Ottobre 2013 23:00:00 GMT-0300 (BRT)


Qualcuno potrebbe dirmi perché questo sta accadendo e come posso risolvere questo problema?

+0

funziona bene per me nel più recente Chrome, uscite 20 ottobre, come previsto? -> [*** Fiddle ***] (http://jsfiddle.net/H9UJY/) – adeneo

+2

Forse è il tuo fuso orario ... –

+0

Anche qui funziona normalmente. – eLRuLL

risposta

14

20 ottobre 2013 è il cutover per BRST. Quindi, se ti trovi in ​​Brasile (in un fuso orario BRST) passerai da BRT (UTC -3) a BRST (UTC-2).

Da TimeAndDate.com:

Ora a San Paolo: Mercoledì, 22 maggio 2013 alle 15:19:14 BRT

San Paolo rimarrà sul BRT fino Domenica 20 ottobre 2013 andare a BRST

La transizione avviene a mezzanotte e la mezzanotte a 1:00 viene saltata. Per garantire un tempo in quella data si può provare:

date = new Date("10/20/2013 01:00:00"); 

E si dovrebbe ottenere con 10/20/2013 01:00:00 BRST come la designazione fuso orario.

Per qualcuno in un fuso orario degli Stati Uniti che partecipa a DST che desidera visualizzare questo problema; Utilizzare l'ora legale punto di transizione degli Stati Uniti del 10 marzo, 2013, in cui viene saltata 02:00 avanti per 03:00:

var d = new Date("03/10/2013 02:59:59") 
alert(d); // Returns 1:59:59 AM in the Standard Time Zone 

var d = new Date("03/10/2013 03:00:00") 
alert(d); // Returns 3:00:00 AM in the Daylight Time Zone 
+0

Ulteriori informazioni sui problemi JS con le date che hanno cambiamenti di orario http://stackoverflow.com/questions/14839244/why-is-safari-confused-about-date-getday-for-dst-start-in-sydney-aus- time-zon – jlarson

+1

Questo spiega perché solo in determinati anni, cioè quando la data cade di domenica! Buona cattura John. – HBP

+0

Ottimo! Google Chrome restituisce la tua data a 1 ora ma Safari mantiene la modifica a BRST. – orafaelreis

0

Alcuni browser potrebbero mostrare valori errati quando si utilizza Date.parse (che è lo stesso di "new Date (string)"). Non conosco il motivo, ma il modo migliore per creare una data è utilizzare lo Date(year, month, day) constructor.

Esempio:

console.log(new Date(2013, 10, 20)) 
+1

Questa non sembra essere la causa ... –

+0

Sì, questo non lo è. La spiegazione di John Koerner è corretta. –

Problemi correlati