Come posso convertire il microformato datetime in ora locale in javascript?


Answers

EcmaScript ha formalizzato l'aggiunta di una stringa di stile ISO-8601 come imput per una data JavaScript. Poiché la maggior parte delle implementazioni JS non supporta questo, ho creato un wrapper per l'oggetto Date, che ha questa funzionalità. Se si impostano i tag title in output in UTC / GMT / Z / Zulu offset, è possibile utilizzare le estensioni EcmaScript 5 per l'oggetto Date di JS .

Per i valori DateTime che devono essere utilizzati negli script lato client, in genere cerco di fare sempre quanto segue. Memorizza data e ora nella zona UTC (anche nei database). Trasmetti le date nella zona UTC. Da client a server, è possibile utilizzare il metodo .toISOString () nel link sopra. Dal server al client questo è relativamente facile.

Via jQuery (con estensione):

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

Non ricordo se ho aggiunto il supporto per le date-ora non-utc nell'input, ma non sarebbe stato troppo difficile renderle conto.

Question

Ho una pagina che utilizza attualmente il microformato datetime per visualizzare un timestamp, ma ho solo mostrato il tempo leggibile dall'uomo per il mio fuso orario:

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

Quello che mi piacerebbe fare è riscrivere l'innerHTML perché il tag abbr abbia lo stesso formato, ma nel fuso orario locale dell'utente. Quindi per un lettore di Seattle, quanto sopra dovrebbe essere convertito in:

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

Ho esaminato l' oggetto Date Javascript , che mi consente di ottenere l'offset del fuso orario locale. Ma ho alcuni problemi:

  1. Non vedo un modo semplice per creare un nuovo oggetto Date da un timestamp ISO-8601 . (Suppongo che potrei analizzare con sottostringhe o regex se non c'è modo più veloce.)

  2. Non vedo un modo per ottenere l'abbreviazione con nome per il fuso orario. Ad esempio, per un lettore di Seattle, vorrei avere il tempo di aggiungere "(PST)" alla fine, altrimenti non è chiaro a quell'utente che il timestamp è stato convertito (specialmente se è un visitatore frequente e si è abituato al fatto che i miei tempi sono in EST).