时钟在不同的时区

时间:2012-06-04 14:57:52

标签: javascript jquery timezone clock

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

我已经能够创建一个时钟来读取计算机上的当前时间,但我不确定如何为此设置时区。

我到目前为止的代码是:

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

6 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

要正确执行 ,您需要一个时区数据库,例如我列出的here之一。

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

您可能需要查看moment-timezone

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

答案 2 :(得分:1)

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

如果您查看演示文稿,请在文本框中添加1 GMT vs 1 MST1 EST,这样就会为您提供一个很棒的日期/时区

答案 3 :(得分:1)

您可以使用

在日期中添加或减去小时数
currentTime.setHours(currentTime.getHours()+offset);

其中offset是任意小时数。

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

获取当前的UTC偏移量

Demo

答案 4 :(得分:0)

谢谢大家的帮助。这一切都让人感到有些困惑,但我在这里找到了一个很好的例子,这就是我最终如何解决这个问题。查看示例4:http://www.ajaxupdates.com/jclock-jquery-clock-plugin/

希望它对其他人有用!

答案 5 :(得分:0)

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

<script>
    function OnTabClickEvent(s, e) {
        var tableUrl;

        switch (e.tab.Index) {
            case 0:
                tableUrl = '@Url.Action("CGridViewPartial", "Competences")';
                break;
            default:
                tableUrl = '@Url.Action("TGridViewPartial", "Technologies")';
        }

        $('#TabContent').empty();
        $('#TabContent').load(tableUrl);
    }
</script>

<div>
    @Html.DevExpress().TabControl(settings => 
    {
        settings.Name = "CatalogTabControl";
        settings.Width = Unit.Percentage(100);

        settings.Tabs.Add(tab =>
        {
            tab.Name = "TabCompetences";
            tab.Text = Headers.Competences;
        });
        settings.Tabs.Add(tab =>
        {
            tab.Name = "TabProjects";
            tab.Text = Headers.ProjectsActivities;
        });
        settings.Tabs.Add(tab =>
        {
            tab.Name = "TabTechnologies";
            tab.Text = Headers.Technologies;
        });

        //Events
        settings.ClientSideEvents.TabClick = "OnTabClickEvent";
    }).GetHtml()
</div>
<div id="TabContent">
    @Html.Action("CGridViewPartial", "Competences")
</div>

我使用表格,所以这将填写

<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>

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