-7

我想在我的网页上显示服务器时间。我用 javascript 代码完成了客户端时间,但我如何显示服务器时间?

是否有任何 zendFramework 类可以做到这一点?

我正在使用下面的 javascript 代码来显示客户端时间:

<head>
<script language="javascript" type="text/javascript">
function startTime()
{
        var today=new Date();

        var h=today.getHours();
        var m=today.getMinutes();
        var s=today.getSeconds();

        // add a zero in front of numbers<10
        m=checkTime(m);
        s=checkTime(s);

        document.getElementById("time_section").innerHTML=h+":"+m+":"+s;
        t=setTimeout('startTime()',500);

}

function checkTime(i)
{
        if (i<10)
         {
              i="0" + i;
         }
        return i;
}
</script>

</head>

<body onload="startTime()">
</body>
4

5 回答 5

7

要显示服务器时间,请使用 date 函数:

<?php echo date('Y-m-d H:i:s'); ?>

如果你的意思是实时时钟,你不能用 php 做到这一点,坚持使用 javascript

于 2012-05-30T14:41:17.990 回答
3

修改您的代码,setTimeout 函数仅每分钟增加客户端的时钟,然后today使用 php 使用服务器时间初始化 javascript 变量,如下所示:

// time() returns seconds, multiply by 1000 to get millisenconds
var today = new Date(<?php echo time() * 1000?>);  

然后javascript时钟应该与客户端中的服务器时间保持一致

或者,您可以通过每隔一定时间(每小时)执行一次 ajax 请求来与服务器时间同步

于 2012-05-30T14:54:15.833 回答
1

通过 AJAX 向服务器询问时间,作为 UNIX 时间戳(PHP 函数time())。到达时,获取与本地时间戳的差值(var timeDiff = new Date() - serverTime * 1000);修改您不太相关的代码以显示new Date() + timeDiff而不是new Date().

让我们尝试一些代码:

var timeDiff;
$.ajax('time.php', {      
  success: function(serverTime) {
    timeDiff = new Date() - serverTime * 1000;
    startTime();
  }
});

替换newDate()newDate() + timeDiff您的startTime. 在服务器端,这很简单,在time.php

header('Content-Type: text-json');
echo time();

没查,可能有bug。买者自负。

h3nr1x 的解决方案也可以,但这样您就不必担心会不同步。

一个小故障是客户端的时间计算都是在本地时区完成的;如果您在与服务器不同的时间跨过 DST 时间,这将影响您,同时显示的时间将不正确。我不知道如何设置 JavaScriptDate对象的时区,或者是否可能。:(

于 2012-05-30T14:43:45.697 回答
0

设置服务器时区

date_default_timezone_set('America/Los_Angeles');

将显示 17:16:18

$currentTime = date("H:i:s");

有关确认选项,请参见date_default_timezone_set()date()

于 2012-05-30T14:44:11.997 回答
0

您可以使用 AJAX 来实现。有一个 php 页面,它回显当前时间并每秒更新一次或使用 ajax 进行更新。

于 2012-05-30T14:58:05.633 回答