sacar obtener mostrar hora formato fecha capturar año actual javascript timezone timestamp microformats

javascript - mostrar - obtener fecha y hora actual jquery



¿Cómo puedo convertir el microformato de fecha y hora a hora local en javascript? (2)

Aquí hay un código mío que analiza una marca de tiempo ISO:

function isoDateStringToDate (datestr) { if (! this.re) { // The date in YYYY-MM-DD or YYYYMMDD format var datere = "(//d{4})-?(//d{2})-?(//d{2})"; // The time in HH:MM:SS[.uuuu] or HHMMSS[.uuuu] format var timere = "(//d{2}):?(//d{2}):?(//d{2}(?://.//d+)?)"; // The timezone as Z or in +HH[:MM] or -HH[:MM] format var tzre = "(Z|(?://+|-)//d{2}(?://://d{2})?)?"; this.re = new RegExp("^" + datere + "[ T]" + timere + tzre + "$"); } var matches = this.re.exec(datestr); if (! matches) return null; var year = matches[1]; var month = matches[2] - 1; var day = matches[3]; var hour = matches[4]; var minute = matches[5]; var second = Math.floor(matches[6]); var ms = matches[6] - second; var tz = matches[7]; var ms = 0; var offset = 0; if (tz && tz != "Z") { var tzmatches = tz.match(/^(/+|-)(/d{2})(/:(/d{2}))$/); if (tzmatches) { offset = Number(tzmatches[2]) * 60 + Number(tzmatches[4]); if (tzmatches[1] == "-") offset = -offset; } } offset *= 60 * 1000; var dateval = Date.UTC(year, month, day, hour, minute, second, ms) - offset; return new Date(dateval); }

Desafortunadamente, tampoco maneja las abreviaturas de la zona horaria. Tendría que modificar la expresión "tzre" para aceptar letras, y la única solución que conozco para tratar las abreviaturas de la zona horaria en Javascript es tener una tabla de búsqueda que actualice de forma manual en caso de cambios en las condiciones regionales. horario de verano.

Tengo una página que actualmente usa el microformato de fecha y hora para mostrar una marca de tiempo, pero solo he mostrado el tiempo legible para humanos para mi propia zona horaria:

<abbr class="published" title="2009-01-09T09:16:00-05:00"> Friday, January 9, 2009 at 9:16 am (EST)</abbr>

Lo que me gustaría hacer es volver a escribir el innerHTML para que la etiqueta abbr sea del mismo formato, pero en la zona horaria local del usuario. Entonces, para un lector en Seattle, lo anterior debe convertirse a:

<abbr class="published" title="2009-01-09T09:16:00-05:00"> Friday, January 9, 2009 at 6:16 am (PST)</abbr>

Miré el objeto Fecha de Javascript , que me permite obtener el desplazamiento de la zona horaria local. Pero tengo algunos problemas:

  1. No veo una manera fácil de crear un nuevo objeto Date a partir de una marca de tiempo ISO-8601 . (Supongo que podría analizar las subcadenas o expresiones regulares si no hay una forma más rápida).

  2. No veo una forma de obtener la abreviatura nombrada para la zona horaria. Por ejemplo, para un lector en Seattle, me gustaría tener el tiempo para tener "(PST)" adjunto al final, de lo contrario no está claro para ese usuario que la marca de tiempo se ha convertido (especialmente si es un visitante frecuente y se ha acostumbrado al hecho de que mis tiempos están en EST).


EcmaScript formalizó la adición de una cadena de estilo ISO-8601 como una entrada para una fecha de JavaScript. Como la mayoría de las implementaciones de JS no son compatibles, creé un contenedor para el objeto Date, que tiene esta funcionalidad. Si configura las etiquetas de título para que salgan en UTC / GMT / Z / Zulu offset, puede usar mis extensiones EcmaScript 5 para el objeto Date de JS .

Para los valores de DateTime que se usarán en los scripts del lado del cliente, generalmente trato de hacer siempre lo siguiente. Almacenar fecha + hora en zona UTC (incluso en bases de datos). Transmitir fechas y horas en la zona UTC. De cliente a servidor, puede usar el método .toISOString () en el enlace anterior. Desde el servidor al cliente, esto es relativamente fácil.

A través de jQuery (con extensión):

$(''.published'').each(function(){ var dtm = new Date(this.title); if (!isNaN(dtm)) { this.text(dtm.toString()); } });

No recuerdo si agregué soporte para fechas fuera de utc en la entrada, pero no sería tan difícil de explicar.