Non è possibile modificare questo comportamento di Javascript, perché è l'unico modo semplice per JavaScript. Quello che succede è semplicemente che Javascript guarda il time shift, calcola il timestamp corrispondente, e poi chiede al sistema operativo la rappresentazione di questo timestamp nel fuso orario locale. La chiave per capire qui è che -05:00
non è un'indicazione del fuso orario ma semplicemente uno spostamento da UTC.
I fusi orari sono animali complessi che sono solo decisioni politiche arbitrarie. Il sistema operativo fornisce un servizio per visualizzare l'ora nel fuso orario locale, ma non in altri fusi orari. Per farlo devi prendere in considerazione cose come la DST che sono praticamente un inferno.
Come sempre con la gestione del tempo, l'unico modo decente per affrontare questo problema è utilizzare una libreria dedicata. In Javascript, troverai Moment.js e Moment.Timezone.js molto utili.
Esempio http://codepen.io/Xowap/pen/XKpKZb?editors=0010
document.write(moment('2013-07-18T17:00:00-05:00').tz('America/New_York').format('LLL'));
Come bonus, si ottiene una tonnellata di formattazione/parsing caratteristiche da Moment.js.
Si prega di notare che finché si utilizza la ISO 8601, la data può essere individuata in un momento preciso, e quindi essere visualizzata in qualsiasi fuso orario di vostro gradimento. In altre parole, JS "convertire" la tua data non ha importanza.
Il punto delle date formattate ISO deve essere riconvertito nel fuso orario ... – SeinopSys
Non è possibile. L'oggetto 'Data' JavaScript non memorizza alcuna informazione sul fuso orario, e quando si esegue l'output/toStringing/logging useranno il fuso orario del browser locale (purtroppo predefinito) o UTC (con metodi espliciti). – Bergi
Ma cosa succede se quello che sto cercando di visualizzare non è nel fuso orario del browser. Perché non datare la stringa di analisi e impostare l'oggetto data sull'offset fuso orario specificato nella stringa iso. – user2434674