parse fecha change javascript datetime iso8601

fecha - ¿Cómo envío una cadena con formato ISO 8601 en JavaScript?



short date javascript (14)

Tengo un objeto Date . ¿Cómo renderizo la parte del title del siguiente fragmento de código?

<abbr title="2010-04-02T14:12:07">A couple days ago</abbr>

Tengo la parte del "tiempo relativo en palabras" de otra biblioteca.

He intentado lo siguiente:

function isoDate(msSinceEpoch) { var d = new Date(msSinceEpoch); return d.getUTCFullYear() + ''-'' + (d.getUTCMonth() + 1) + ''-'' + d.getUTCDate() + ''T'' + d.getUTCHours() + '':'' + d.getUTCMinutes() + '':'' + d.getUTCSeconds(); }

Pero eso me da:

"2010-4-2T3:19"


Casi todos los métodos de to-ISO en la web eliminan la información de la zona horaria aplicando una conversión a "Z" ulu time (UTC) antes de emitir la cadena. El archivo .toISOString () nativo del navegador también elimina 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 a la hora Zulú o en cualquier zona horaria que requiera, mientras obtiene la información de la zona horaria del remitente.

La mejor solución que he encontrado es usar la biblioteca de JavaScript Moment.js y usar el siguiente código:

Para obtener el tiempo ISO actual con información de la zona horaria y 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 el tiempo ISO de un objeto Fecha de JavaScript 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 con formato como este es compositiva JSON, y se presta para almacenarla en una base de datos. Python y C # parecen gustarle.


El problema con toISOString es que proporciona datetime solo como "Z".

ISO-8601 también define la fecha y hora con la diferencia de zona horaria en horas y minutos, en las formas como 2016-07-16T19: 20: 30 + 5: 30 (cuando la zona horaria es UTC) y 2016-07-16T19: 20: 30-01 : 00 (cuando la zona horaria está detrás de UTC).

No creo que sea una buena idea usar otro plugin, moment.js para una tarea tan pequeña, especialmente cuando puedes obtenerlo con unas pocas líneas de código.

var timezone_offset_min = new Date().getTimezoneOffset(), offset_hrs = parseInt(Math.abs(timezone_offset_min/60)), offset_min = Math.abs(timezone_offset_min%60), timezone_standard; if(offset_hrs < 10) offset_hrs = ''0'' + offset_hrs; if(offset_min > 10) offset_min = ''0'' + offset_min; // getTimezoneOffset returns an offset which is positive if the local timezone is behind UTC and vice-versa. // So add an opposite sign to the offset // If offset is 0, it means timezone is UTC if(timezone_offset_min < 0) timezone_standard = ''+'' + offset_hrs + '':'' + offset_min; else if(timezone_offset_min > 0) timezone_standard = ''-'' + offset_hrs + '':'' + offset_min; else if(timezone_offset_min == 0) timezone_standard = ''Z''; // Timezone difference in hours and minutes // String such as +5:30 or -6:00 or Z console.log(timezone_standard);

Una vez que tenga el desplazamiento de la zona horaria en horas y minutos, puede adjuntar a una cadena de fecha y hora.

Escribí una publicación en el blog: http://usefulangle.com/post/30/javascript-get-date-time-with-offset-hours-minutes


Falta un ''+'' después de la ''T''

isoDate: function(msSinceEpoch) { var d = new Date(msSinceEpoch); return d.getUTCFullYear() + ''-'' + (d.getUTCMonth() + 1) + ''-'' + d.getUTCDate() + ''T'' + d.getUTCHours() + '':'' + d.getUTCMinutes() + '':'' + d.getUTCSeconds(); }

Deberías hacerlo.

Para los ceros iniciales puedes usar esto desde here :

function PadDigits(n, totalDigits) { n = n.toString(); var pd = ''''; if (totalDigits > n.length) { for (i=0; i < (totalDigits-n.length); i++) { pd += ''0''; } } return pd + n.toString(); }

Usándolo así:

PadDigits(d.getUTCHours(),2)


La pregunta formulada fue el formato ISO con precisión reducida. Voila:

new Date().toISOString().slice(0, 19) + ''Z'' // ''2014-10-23T13:18:06Z''

Suponiendo que la Z final es deseada, de lo contrario simplemente omita.


Más corto, pero no es compatible con Internet Explorer 8 y versiones anteriores:

new Date().toJSON()


Normalmente no quiero mostrar una fecha UTC ya que a los clientes no les gusta hacer la conversión en su cabeza. Para mostrar una fecha ISO local , uso la función:

function toLocalIsoString(date, includeSeconds) { function pad(n) { return n < 10 ? ''0'' + n : n } var localIsoString = date.getFullYear() + ''-'' + pad(date.getMonth() + 1) + ''-'' + pad(date.getDate()) + ''T'' + pad(date.getHours()) + '':'' + pad(date.getMinutes()) + '':'' + pad(date.getSeconds()); if(date.getTimezoneOffset() == 0) localIsoString += ''Z''; return localIsoString; };

La función anterior omite la información de desplazamiento de la zona horaria (excepto si la hora local es UTC), por lo que uso la siguiente función para mostrar el desplazamiento local en una sola ubicación. También puede agregar su salida a los resultados de la función anterior si desea mostrar el desplazamiento en cada una de las veces:

function getOffsetFromUTC() { var offset = new Date().getTimezoneOffset(); return ((offset < 0 ? ''+'' : ''-'') + pad(Math.abs(offset / 60), 2) + '':'' + pad(Math.abs(offset % 60), 2)) };

toLocalIsoString utiliza pad . Si es necesario, funciona como casi cualquier función de almohadilla, pero en aras de la integridad, esto es lo que uso:

// Pad a number to length using padChar function pad(number, length, padChar) { if (typeof length === ''undefined'') length = 2; if (typeof padChar === ''undefined'') padChar = ''0''; var str = "" + number; while (str.length < length) { str = padChar + str; } return str; }


Para extender la gran y concisa respuesta de Sean con algo de azúcar y sintaxis moderna:

// date.js const getMonthName = (num) => { const months = [''Jan'', ''Feb'', ''Mar'', ''Apr'', ''May'', ''Jun'', ''Jul'', ''Aug'', ''Oct'', ''Nov'', ''Dec'']; return months[num]; }; const formatDate = (d) => { const date = new Date(d); const year = date.getFullYear(); const month = getMonthName(date.getMonth()); const day = (''0'' + date.getDate()).slice(-2); const hour = (''0'' + date.getHours()).slice(-2); const minutes = (''0'' + date.getMinutes()).slice(-2); return `${year} ${month} ${day}, ${hour}:${minutes}`; }; module.exports = formatDate;

Entonces, por ejemplo.

import formatDate = require(''./date''); const myDate = "2018-07-24T13:44:46.493Z"; // Actual value from wherever, eg. MongoDB date console.log(formatDate(myDate)); // 2018 Jul 24, 13:44


Pude obtener una salida inferior con muy menos código.

var ps = new Date(''2010-04-02T14:12:07'') ; ps = ps.toDateString() + " " + ps.getHours() + ":"+ ps.getMinutes() + " hrs";

Salida:

Fri Apr 02 2010 19:42 hrs


Si no necesita ser compatible con IE7, lo siguiente es un excelente y conciso truco:

JSON.parse(JSON.stringify(new Date()))



Vea el último ejemplo en la página https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Date :

/* Use a function for the exact format desired... */ function ISODateString(d) { function pad(n) {return n<10 ? ''0''+n : n} return d.getUTCFullYear()+''-'' + pad(d.getUTCMonth()+1)+''-'' + pad(d.getUTCDate())+''T'' + pad(d.getUTCHours())+'':'' + pad(d.getUTCMinutes())+'':'' + pad(d.getUTCSeconds())+''Z'' } var d = new Date(); console.log(ISODateString(d)); // Prints something like 2009-09-28T19:03:12Z


Ya existe una función llamada toISOString() :

var date = new Date(); date.toISOString(); //"2011-12-19T15:28:46.493Z"

Si, de alguna manera, estás en un navegador que no lo admite, te tengo cubierto:

if ( !Date.prototype.toISOString ) { ( function() { function pad(number) { var r = String(number); if ( r.length === 1 ) { r = ''0'' + r; } return r; } Date.prototype.toISOString = function() { return this.getUTCFullYear() + ''-'' + pad( this.getUTCMonth() + 1 ) + ''-'' + pad( this.getUTCDate() ) + ''T'' + pad( this.getUTCHours() ) + '':'' + pad( this.getUTCMinutes() ) + '':'' + pad( this.getUTCSeconds() ) + ''.'' + String( (this.getUTCMilliseconds()/1000).toFixed(3) ).slice( 2, 5 ) + ''Z''; }; }() ); }


function getdatetime() { d = new Date(); return (1e3-~d.getUTCMonth()*10+d.toUTCString()+1e3+d/1) .replace(/1(..)..*?(/d+)/D+(/d+).(/S+).*(...)/,''$3-$1-$2T$4.$5Z'') .replace(/-(/d)T/,''-0$1T''); }

Encontré los conceptos básicos sobre el Desbordamiento de pila en algún lugar (creo que era parte de otro juego de golf de Stack Exchange), y lo mejoré para que funcione en Internet Explorer 10 o anterior también. Es feo, pero hace el trabajo.


function timeStr(d) { return ''''+ d.getFullYear()+ (''0''+(d.getMonth()+1)).slice(-2)+ (''0''+d.getDate()).slice(-2)+ (''0''+d.getHours()).slice(-2)+ (''0''+d.getMinutes()).slice(-2)+ (''0''+d.getSeconds()).slice(-2); }