【问题标题】:Moment.js & Moment Timezone with data-attribute timezones带有数据属性时区的 Moment.js 和 Moment Timezone
【发布时间】:2014-08-15 07:41:26
【问题描述】:

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

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

我想使用 JS/Jquery 和 Moment Timezone 执行此操作:

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

编辑:我使用 jQuery 成功提取了数据属性值,但是当我尝试将它们传递给 moment().tz() 时;时间未转换,而是显示我的本地客户端时间。当我手动输入 IANA 时区 ID 时,会发生转换(尽管仍然不准确)。关于为什么 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

link

【问题讨论】:

    标签: javascript jquery time timezone momentjs


    【解决方案1】:

    这是一个有效的 JSFiddle

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

    请注意我所做的 2 处更改:

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

    【讨论】:

    • 哇。我已经检查了大约 50 次代码,重新阅读了文档,尝试更改每一行...非常感谢您的帮助!
    【解决方案2】:

    有点难以理解您的问题,但考虑到您的“逐步”列表,我会执行以下操作:

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

    DEMO

    【讨论】:

    • 感谢您的回复 - 当我运行代码时,timeZone 变量似乎返回了 undefined 的值 - 您可以在此处查看:jsfiddle.net/gLNXd/41
    • 我不能使用那个小提琴,因为需要身份验证但是我意识到我使用的时刻不正确,它应该是这样的(函数调用时刻):jsfiddle.net/hypzo/gLNXd/43
    • 我发现 undefined 数据属性的问题在于使用大写字符,这导致 jQuery 将字符串解释为多个 data-attributes。现在它显示的是时间,但这只是我的当地时间。
    猜你喜欢
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 2017-09-03
    相关资源
    最近更新 更多