Moment.js,带有数据属性时区的时刻时区

Moment.js & Moment Timezone with data-attribute timezones

本文关键字:时区 时刻 数据属性 js Moment      更新时间:2023-09-26

我有一个服务器生成的country/city格式的位置列表,即

<span class="location" data-timeZoneID="China/Beijing">Beijing</span>
<span class="location" data-timeZoneID="England/London">London</span>

我想使用JS/Jquery和时刻时区这样做:

  1. 从每个项目中提取data-timezone-属性
  2. 提供给moment.tz()的实例,
  3. 并将结果附加到元素,从而在列出的任何位置显示时间。

编辑:我成功地拉数据属性值与jQuery,但当我试图将它们传递给moment().tz();时间没有转换,而是显示我的本地客户端时间。当我手动输入IANA时区ID时,会发生转换(尽管仍然不准确)。关于为什么data-attribute提供的值不能工作的任何想法?

This (sortof) works:

$(function(){
    $('.location').each(function() {
        var timeZone = $(this).data('timezoneid');
        var now = moment().tz('Africa/Tripoli').format("MM/DD/YYYY hh:mm");
        $(this).append( now );
    });
});

这不会(显示本地时间):

<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

链接

这是一个可以工作的JSFiddle

http://jsfiddle.net/93pEd/1/

注意我做的两个修改:

 - London is Europe/London instead of England/London
 - the format is HH:mm instead of HH:MM

很难理解你的问题是什么,但考虑到你的"一步一步"列表,我会做以下事情:

$(function(){
    $('.location').each(function() {
        var timeZone = $(this).data('timeZoneID');
        var now = moment().tz(timeZone).format('HH:MM');
        $(this).append( now );
    });
});
演示