Casi todos los métodos para-ISO en la web cae la información de zona horaria mediante la aplicación de un convertido a la "Z" tiempo ulu (UTC) antes de dar salida a la cadena. La .toISOString() nativa del navegador también elimina la información de la zona horaria.
Esto descarta información valiosa, ya que el servidor, o el destinatario, siempre puede convertir una fecha ISO completa en zulú o en cualquier zona horaria que lo requiera, al tiempo que obtiene la información de zona horaria del remitente.
La mejor solución que he encontrado es utilizar el Moment.js librería javascript y utilizar el siguiente código:
Para obtener la hora actual ISO con la información de zona horaria en milisegundos
now = moment().format("YYYY-MM-DDTHH:mm:ss.SSSZZ")
// "2013-03-08T20:11:11.234+0100"
now = moment().utc().format("YYYY-MM-DDTHH:mm:ss.SSSZZ")
// "2013-03-08T19:11:11.234+0000"
now = moment().utc().format("YYYY-MM-DDTHH:mm:ss") + "Z"
// "2013-03-08T19:11:11Z" <- better use the native .toISOString()
Para obtener la hora ISO de un objeto JavaScript Fecha nativo con información de zona horaria pero sin milisegundos
var current_time = Date.now();
moment(current_time).format("YYYY-MM-DDTHH:mm:ssZZ")
Esto se puede combinar con Date.js para obtener funciones como Date.today(), cuyo resultado se puede pasar al momento.
Una cadena de fecha formateada de esta manera es compiladora JSON, y se presta para ser almacenada en una base de datos. Python y C# parecen gustarle.
.toISOString() definitivamente devuelve la fecha en UTC? – JonWells
No en todos los navegadores, como se indica: http://kangax.github.com/es5-compat-table/ – Alastair
'new Date (" xx "). ToISOString()' produce 'NaN-NaN-NaNTNaN: NaN: NaN .NZ' La implementación nativa arroja RangeException. –