2013-08-06 2 views
5

У меня есть сценарий, который читает часовой пояс пользователей и отображает время в соответствии с пользователями. Как отобразить сокращенное обозначение часового пояса?Отображение сокращения времени в часах с Date.js

У меня есть игровой сайт, а на сообщениях мы пишем: «Мы будем играть вживую в 7:00». Пользователи со всего мира читают наш блог и хотят смотреть вживую. У меня есть следующий скрипт, который должен читать часовой пояс пользователей и отображает время в зависимости от того, где живет пользователь.

<!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> 

Как отобразить конкретного пользователя часового пояса аббревиатуру рядом времени, так что пользователи знают, что время основано на их часовом поясе?

ответ

3

Несколько вещей:

  • date.js has been abandoned. Вероятно, вам следует избегать его использования.
  • Сокращения часового пояса неоднозначны. См. this list.
  • Например, если вы выводите как «CST» - это может означать «Центральное стандартное время», «Китайское стандартное время» или «Стандартное время Кубы».
  • Насколько мне известно, нет библиотек, которые дадут вам аббревиатуру локального часового пояса.
  • Обычно вы можете увидеть информацию о зоне с помощью только Date().toString(), но она сильно зависит от браузера. Это может быть аббревиатура, или как локализованное полное имя или идентификатор часового пояса, или совсем нет.
  • Возможно, вам будет лучше всего показывать смещение. Это будет стандартизировано, по крайней мере. Вы можете сделать это с помощью сырого JavaScript или даже проще с moment.js.
  • В коде, который вы указали, даты ввода нет, поэтому вам будет сложно заблокировать его в определенный часовой пояс. Вы предполагаете, что «EDT» - это то, что может распознаваться парсером даты во всех браузерах, и это неверно.
  • Лучшим подходом было бы начать с точного момента (либо в формате UTC, либо со смещением), а затем отобразить его в правильном формате. Например, (с 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

обновленная версия DateJS основного кода (и будут фиксировать открытые ошибки в будущем) можно найти здесь:

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

Однако похоже, что вы просто ищете формат DateJS или методы toString.

Например:

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

это оставит время со строкой «3:40 PM PDT»

Это не зависит от внутренних проблем браузера, как DateJS выполняет поиск на основе смещения для даты (которая не изменяется для каждого браузера).

0

Пример пробуя с Node.js часовой пояс (вслед за 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 имеет entry point "hook" for time zone abbreviations, но, насколько я знаю, не существует библиотека, которая использует это все же.

0

попробовать момент часовой пояс, http://momentjs.com/timezone/docs/#/zone-object/abbr/

<script> 
    moment().tz("America/Los_Angeles").zoneAbbr(); 
</script> 

Пожалуйста, обратите внимание, что включают в себя moment.js, момент- timezone.js и момент-часового пояса-data.js

Смежные вопросы