2013-08-06 40 views
5

Mam skrypt, który odczytuje strefę czasową użytkowników i wyświetla czas według użytkowników. Jak wyświetlić skrót strefy czasowej?Wyświetlanie skrótu strefy czasowej za pomocą Date.js

Mam stronę do gier, aw postach piszemy "Będziemy grać na żywo o 7:00". Użytkownicy z całego świata czytają nasz blog i chcą oglądać na żywo. Mam następujący skrypt, który ma odczytywać strefę czasową użytkowników i wyświetla czas w zależności od tego, gdzie mieszka użytkownik.

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <title>Localtime</title> 
    </head> 
    <body> 
    We'll be playing live at <span class="localtime">7:00PM EDT</span> 
    <script src="//cdnjs.cloudflare.com/ajax/libs/datejs/1.0/date.min.js"></script> 
    <script 
     var els = document.getElementsByClassName('localtime'); 
     for (var i = 0, l = els.length; i < l; i++) 
     els[i].innerHTML = 
      Date.parse(els[i].innerHTML).toLocaleString(); 
    </script> 
    </body> 
</html> 

Jak mogę wyświetlić skrót strefy czasowej danego użytkownika obok czasu, aby użytkownicy wiedzieli, że czas jest w oparciu o ich strefy czasowej?

Odpowiedz

3

kilka rzeczy:

  • date.js has been abandoned. Powinieneś raczej unikać jej używania.
  • Skróty strefy czasowej są niejednoznaczne. Zobacz this list.
  • Na przykład, jeśli wypiszesz jako "CST" - może to oznaczać "Central Standard Time", "China Standard Time" lub "Cuba Standard Time".
  • O ile mi wiadomo, nie ma żadnych bibliotek, które podadzą skrót lokalnej strefy czasowej.
  • Zwykle niektóre informacje o strefie można zobaczyć tylko z numerem Date().toString(), ale w dużej mierze zależy to od przeglądarki. Może pojawić się jako skrót lub jako zlokalizowane pełne imię i nazwisko lub identyfikator strefy czasowej lub wcale.
  • Być może lepiej byłoby po prostu pokazać przesunięcie. To by było co najmniej standaryzowane. Możesz to zrobić za pomocą surowego JavaScript lub jeszcze łatwiej z moment.js.
  • W podanym kodzie nie ma daty wprowadzenia, więc będziesz mieć trudności z zablokowaniem go w określonej strefie czasowej. Zakładasz, że "EDT" to coś, co może być rozpoznane przez analizator dat we wszystkich przeglądarkach, a to nieprawda.
  • Najlepszym podejściem byłoby rozpoczęcie z dokładnym momentem (albo jako UTC lub z przesunięciem), a następnie wyrenderowanie go we właściwym formacie. Na przykład, (z moment.js)

    var m = moment("2013-08-06T19:00:00-04:00"); // this is 7PM EDT 
    var s = m.format("HH:mm ([UTC]ZZ)"); // example: "16:00 (UTC-0700)" 
    
2

zaktualizowana wersja kodu DateJS rdzenia (i będzie ustalenie otwartych błędów w przyszłości) dostępny tutaj:

https://github.com/abritinthebay/datejs/

jednak wygląda na to, że po prostu szukasz formatu DateJS lub metodyString.

Na przykład:

var tmp = Date.parse("2013-09-05T22:40:00Z"); 
var time = tmp.format("g:i A T"); 

byłoby pozostawić czas z napisu „3:40 PM PDT”

ta nie opiera się na kwestiach wewnętrznych przeglądarek jak DateJS wykonuje wyszukiwanie w oparciu o przesunięcie dla daty (która nie zmienia się dla przeglądarki).

0

Bigeasy's Timezone wydaje się być rozwiązaniem, które daje skrót strefy czasowej, chociaż jak sugeruje @ matt-johnson, skróty are not standardized.

Przykład wypróbowanie strefy czasowej z node.js (zastosowaną w walk-through):

$ npm install timezone 
$ node 
> tz = require('timezone'); 
[Function] 
> us = tz(require("timezone/America")); 
[Function] 
> us(us("2013-12-11 03:00"), "America/Detroit", "%Z") 
'EST' 
> us(us("2013-12-11 03:00"), "America/Los_Angeles", "%Z") 
'PST' 
> us(us("2013-10-11 03:00"), "America/Los_Angeles", "%Z") 
'PDT' 

Moment.js ma entry point "hook" for time zone abbreviations, ale o ile wiem, nie ma biblioteki, które korzystają z tego jeszcze.