显示另一个时区的时间

时间:2016-07-15 16:45:47

标签: javascript time timezone momentjs

我正在创建一个必须显示的页面,UTC时间,我的当前时间和其他/国家/时区时间。我使用moment.min.js,moment-timezone.js,jquery.min.js - 我用过 - http://www.digitoffee.com/programming/get-local-time-utc-using-moment-js/94/。请帮助我获得另一个时区的时间。 - 这是jsFiddle中的代码 - https://jsfiddle.net/shejus/g63d2onw/10/ - 请帮忙

<html>
    <head>
        <title>DISPLAY TIME</title>
    </head>
    <body>

        UTC
        <br/>
        <div id="divUTC"></div>
        <br/>
Your Local Time with respect to above UTC time
        <br/>
        <div id="divLocal"></div>
        <br/>
OTHER TIMEZONE TIME
        <br/>
        <div id="anyutctime"></div>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script src="js/moment.min.js"></script>
        <script>
    $(function(){
  setInterval(function(){
    var divUtc = $('#divUTC');
    var divLocal = $('#divLocal');
    var anyutctime = $ ('#anyutctime');

    //put UTC time into divUTC  
    divUtc.text(moment.utc().format('YYYY-MM-DD HH:mm:ss'));      

    //get text from divUTC and conver to local timezone  
    var localTime  = moment.utc(divUtc.text()).toDate();
    localTime = moment(localTime).format('YYYY-MM-DD HH:mm:ss');
    divLocal.text(localTime);        
  },1000);

    //Display time of Another timezone 
     var anyTime  = moment.utc(divUtc.text()).toDate();
    anyTime = moment.tz("America/Chicago").format('YYYY-MM-DD HH:mm:ss');
    anyutctime.text(anyTime);        
});
    </script>
        <script src="js/moment-timezone.js"></script>
    </body>
</html>

1 个答案:

答案 0 :(得分:3)

有几个错误:

  • 您的小提琴未加载您指定的所有资源。

    • jQuery未加载,因为您提供了http网址,而小提琴则通过https加载。根据经验,在jsFiddle上加载外部资源时指定protocol-relative URLs。 (使用//启动网址,不要使用任何http:https:

    • 你正在加载片刻时区。根据时刻 - 时区文档,您需要加载首先的时刻。瞬间 - 时区陷入了全球化的时刻。

  • 您没有向时区提供任何时区数据。您可以使用moment.tz.add手动加载特定时区的数据,也可以使用其中一个预先填充的数据文件,例如moment-timezone-with-data-2010-2020.min.js。您使用此文件而不是 moment-timezone.min.js文件(包括脚本和数据)。

  • 您的HTML代码段中有<body>个标记。这在jsFiddle中不是必需的。

  • 您有一些内部函数范围之外的脚本被setInterval调用。这导致首次运行时divUtc未定义,并且未填充“其他时区时间”。仔细观察结束括号。

解决了上述问题,您的代码运行正常。 Updated fiddle here

但是,您的脚本中仍然有一些不必要的操作。通常,不需要使用div内容,字符串或Date对象作为中间状态持有者。实际上,因为你没有对moment对象做任何其他事情,你可以只创建一次并在每次显示之前改变状态。 (如果您正在进行进一步的操作,您可能希望首先克隆。)

The fully optimized jsFiddle is here,代码如下:

$(function(){
  setInterval(function(){
    var divUtc = $('#divUTC');
    var divLocal = $('#divLocal');
    var divOther = $('#divOther');

    var format = 'YYYY-MM-DD HH:mm:ss';

    // get current local time
    var now = moment();

    // display the local time
    divLocal.text(now.format(format));

    // switch to utc mode and display
    divUtc.text(moment.utc().format(format));      

    // switch to another time zone and display
    divOther.text(now.tz('America/Chicago').format(format));
  },1000);
});

最后,我只是评论一般情况下你应该尝试在Stack Overflow上提出更具体的问题,而不仅仅是寻找一般的调试帮助。 Stack Overflow主要是提供有用的可重复使用的问题和答案,除了帮助您解决这个特定问题之外,还有助于其他人。下次,请按照Stack Overflow帮助中心的以下文章中的指导进行操作: