6

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

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

我到目前为止的代码是:

<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 样式,因此我可以使用特定字体的时钟。

4

6 回答 6

2

正确执行此操作,您将需要一个时区数据库,例如我在此处列出的数据库之一。

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

您可能想查看moment-timezone

moment().tz("America/New_York").format()
于 2013-11-25T20:17:35.453 回答
2

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

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

于 2012-06-04T15:03:18.010 回答
1

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

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

于 2012-06-04T15:05:33.493 回答
1

您可以从日期中添加或减去小时数

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

其中 offset 是任意小时数。

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

演示

于 2012-06-04T15:08:19.327 回答
0

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

希望对其他人有用!

于 2012-06-06T11:08:24.363 回答
0

我在 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 可能不会产生相同的效果。但如前所述,这是我在其他区域获得工作时间的决心。

于 2016-09-21T12:56:16.197 回答