#javascript #jquery #time #timezone #momentjs
#javascript #jquery #время #Часовой пояс #momentjs
Вопрос:
У меня есть сгенерированный сервером список местоположений в country/city
формате, т.е.
<span class="location" data-timeZoneID="China/Beijing">Beijing</span>
<span class="location" data-timeZoneID="England/London">London</span>
Я бы хотел использовать JS / Jquery и моментальный часовой пояс для этого:
- Извлеките
data-timezone-
атрибут из каждого элемента - Предоставьте его экземпляру
moment.tz()
, - И добавьте элемент с результатом, таким образом отображая время в любых перечисленных местах.
РЕДАКТИРОВАТЬ: я успешно извлекаю значения атрибутов данных с помощью jQuery, но когда я пытаюсь передать их moment().tz()
; время не преобразуется, и вместо этого отображается время моего локального клиента. Когда я вручную ввожу идентификатор часового пояса IANA, происходит преобразование (хотя оно по-прежнему неточно). Любые мысли о том, почему значение, предоставленное из data-attribute
, не будет работать?
Это (вроде) работает:
$(function(){
$('.location').each(function() {
var timeZone = $(this).data('timezoneid');
var now = moment().tz('Africa/Tripoli').format("MM/DD/YYYY hh:mm");
$(this).append( now );
});
});
Этого не происходит (отображается местное время):
HTML
<span class="location" data-timeZoneID="Africa/Tripoli">Tripoli: </span><br />
<span class="location" data-timeZoneID="England/London">London: </span>
JS
$(function(){
$('.location').each(function() {
var timeZone = $(this).data('timezoneid');
var now = moment().tz("'" timeZone "'").format("MM/DD/YYYY hh:mm");
$(this).append( now );
});
});
jsFiddle
Ответ №1:
Вот JSFiddle, который работает
Обратите внимание на 2 изменения, которые я внес:
- London is Europe/London instead of England/London
- the format is HH:mm instead of HH:MM
Комментарии:
1. Вау. Я просмотрел код, вероятно, 50 раз, перечитал документацию, попытался изменить каждую строку… большое спасибо за помощь!
Ответ №2:
Было немного сложно понять, в чем ваша проблема, но, учитывая ваш «пошаговый» список, я бы сделал следующее:
$(function(){
$('.location').each(function() {
var timeZone = $(this).data('timeZoneID');
var now = moment().tz(timeZone).format('HH:MM');
$(this).append( now );
});
});
Комментарии:
1. спасибо за ваш ответ — когда я запускаю код,
timeZone
переменная, похоже, возвращает значениеundefined
— вы можете увидеть его здесь: jsfiddle.net/gLNXd/412. Я не могу использовать эту скрипку, поскольку требуется аутентификация, однако я понял, что неправильно использую moment, это должно быть что-то вроде этого (вызов функции в moment): jsfiddle.net/hypzo/gLNXd/43
3. Я выяснил, что проблема с атрибутом
undefined
данных заключалась в использовании символов верхнего регистра, что заставляет jQuery интерпретировать строку как несколькоdata-attribute
символов. Теперь он отображает время, но это просто мое местное время.