【问题标题】:Clock in different time zones不同时区的时钟
【发布时间】:2012-06-08 15:39:17
【问题描述】:

我正在尝试在一个网站上创建两个时钟,上面写着两次。一个来自伦敦,另一个来自纽约。

我已经能够在我的计算机上创建一个读取当前时间的时钟,但我不确定如何将时区放入其中。

我目前的代码是:

<script type="text/javascript" language="javascript">

function renderTime() {
    var currentTime = new Date();
    var diem = "AM";
    var h = currentTime.getHours();
    var m = currentTime.getMinutes();
    var s = currentTime.getSeconds();

    if (h == 0) {
        h = 12
    } else if (h > 12) {
        h = h - 12;
        diem = "PM";
    }

    if (h < 10) {
        h = "0" + h;
    }

    if (m < 10) {
        m = "0" + m;
    }

    if (s < 10) {
        s = "0" + s;
    }

    var myClock = document.getElementById ("clockDisplay");
    myClock.textContent = h + ":" + m + ":" + s + " " + diem;

    setTimeout ('renderTime()', 1000);
}
renderTime();
</script>

这将应用于我创建的 CSS 样式,以便我可以使用特定字体的时钟。

【问题讨论】:

  • Here's 有很多方法可以实现。

标签: javascript jquery timezone clock


【解决方案1】:

currentTime.getTimezoneOffset() 将为您提供格林威治标准时间 (GMT) 与本地时间之间的时差,以分钟为单位。

您可以使用该值来计算所需时区的时间。

【讨论】:

    【解决方案2】:

    要做到这一点正确,您需要一个时区数据库,例如我列出的here 之一。

    这个问题的所有其他答案都错误地认为“时区”和“时区偏移”是同一件事。他们不是。例如,伦敦的时区是 Europe/London,它可以有 +0 或 +1 偏移量,具体取决于它是一年中的什么时间。纽约的时区是America/New_York,根据与伦敦完全不同的一组日期,它可以有 -5 或 -4 的偏移量。

    你可能想看看moment-timezone

    moment().tz("America/New_York").format()
    

    【讨论】:

      【解决方案3】:

      您可以在日期中增加或减少小时数

      currentTime.setHours(currentTime.getHours()+offset);
      

      其中 offset 是任意小时数。

      我用该行和函数更新了 jsfiddle,以便它接受偏移量参数。这不是 UTC 偏移量,而是从系统时间添加多少小时。您可以通过currentTime.getTimezoneOffset()/60获取当前UTC偏移量

      Demo

      【讨论】:

      • 嗨,Sachleen,感谢您的帮助。我一直在尝试通过您的方法解决这个问题。所以使用: currentTime.setHours(currentTime.getHours()+offset);并将“+offset”替换为“-5”(与伦敦的时差)让我有时间去纽约。但是,如果有人在纽约查看时间,是否会再缩短 5 小时?还有英国时间我只需要输入:currentTime.getTimezoneOffset()/60?还是我需要采取进一步的步骤。感谢您的帮助,我对此很陌生!谢谢。
      • 是的,如果您选择 -5,则会从当地时间减去 5 小时。这就是为什么你 getTimezoneOffset 首先要弄清楚要加/减多少小时。你不想做 -5,而是从 UTC (+0) 开始做 -5,所以你需要从本地偏移量中抵消偏移量。例如,如果我的时间偏移量已经是 -5,那么您的脚本将不会减去任何内容。如果是-6,它会加1,所以最终结果是-5。随着时间的推移做事情会变得混乱,我会看一个已经解决了所有奇怪事情的图书馆。
      【解决方案4】:

      查看http://www.datejs.com/,它可以很好地处理日期和时区

      如果您查看演示,请在文本框中输入1 GMT vs 1 MST1 EST,它会弹出一个适合您的日期/那个时区

      【讨论】:

      • 感谢您提供此 RGB,将对其进行调查。
      【解决方案5】:

      感谢大家的帮助。这一切都变得有点混乱,但我在这里找到了一个很好的例子,这就是我最终解决它的方式。查看示例 4:http://www.ajaxupdates.com/jclock-jquery-clock-plugin/

      希望对其他人有用!

      【讨论】:

        【解决方案6】:

        我在 m php 网站上使用以下内容:

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"
        <script type="text/javascript">
        $(function() {
            getStatus();
        });
        
        function getStatus() {
        <?php
        echo "    var z = '".strftime("%Z",strtotime("now"))."';\n";
        ?>
            var d = new Date();
            var utc = d.getTime() + (d.getTimezoneOffset() * 60000);
            var offset = -8;
            if(z == "PDT") offset = -7;
            var currentTime = new Date(utc + (3600000*offset));
            var currentHours = currentTime.getHours ( );
            var currentMinutes = currentTime.getMinutes ( );
            currentMinutes = ( currentMinutes < 10 ? "0" : "" ) + currentMinutes;
            var timeOfDay = ( currentHours < 12 ) ? "AM" : "PM";
            currentHours = ( currentHours > 12 ) ? currentHours - 12 : currentHours;
            currentHours = ( currentHours == 0 ) ? 12 : currentHours;
            var currentTimeString = currentHours + ":" + currentMinutes + ": " + timeOfDay + " " + z;
        
            $('td#clock').html(currentTimeString);
            setTimeout("getStatus()",5000);
        }
        </script>
        

        我在哪里使用表格,所以它会填满

        <table><tr><td id='clock'></td></tr></table>
        

        随着时间从洛杉矶​​(PDT 或 PST)开始,但是我的服务器也在那个时间运行,因此从您的服务器传递 strftime 可能不会产生相同的效果。但如前所述,这是我在其他地区获得工作时间的决心。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-24
          • 2019-11-22
          • 1970-01-01
          相关资源
          最近更新 更多