关于php:Javascript时钟?

Javascript clock?

我用PHP获得GMT时间,我想像时钟一样计算它。

1
2
3
4
5
6
7
8
<?php $time = gmdate('H:i:s'); ?>

var time = <?php echo($time) ?>;
    setInterval(function() {
        time += 1;
        $("#timediv").text("Current time (GMT):" + time);
        //somehow convert it to 11:44:31 AM ??
    }, 1000);

可以帮助我吗?


首先,依靠setTimeout / setInterval精度来显示时间并不是一个好主意。有多种原因使它们不那么准确,比如CPU减速。这就是为什么你应该使用Date对象,它使用实际的时钟。

当我想在客户端使用我的服务器时间时,这就是我的工作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- jQuery -->
<script src="https://code.jquery.com/jquery-2.1.3.min.js">

<!-- dateFormat plugin for nice and easy time formatting -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-dateFormat/1.0/jquery.dateFormat.min.js">


    var clientTime = (new Date()).getTime(),
        serverTime = <?php echo time() ?> * 1000,
        difference = clientTime - serverTime;

    setInterval(function () {
        var now = new Date();

        now.setTime(now.getTime() - difference);

        $("#timediv").text("Current time (GMT):" + $.format.date(now,"hh:mm:ss a"));
    }, 1000);

它背后的关键概念是计算服务器时间和客户端时间之间的差异。然后,使用差异规范化客户端(每次使用new Date()创建)。我们仍在使用setInterval,但即使由于某种原因它被延迟或加速,显示的时间仍然是正确的。


我不会按照motanelu的回答,但改为:

1
2
3
4
5
6
var time = Date.parse('<?php echo($time) ?>');
    setInterval(function() {
        time.setSeconds(time.getSeconds() + 1);
        $("#timediv").text("Current time (GMT):" + time);
        //somehow convert it to 11:44:31 AM ??
    }, 1000);

这将创建一个Date对象,您可以使用例如time.toLocaleTimeString();进行格式化


谢谢你们,我做到了:

PHP:

1
2
3
4
$time = gmdate('H:i:s');
$time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/","00:$1:$2", $time);
sscanf($time,"%d:%d:%d", $hours, $minutes, $seconds);
$timeInSeconds = $hours * 3600 + $minutes * 60 + $seconds;

使用Javascript:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    function fromSeconds(sec){
        var d=new Date(0,0,0);
        d.setSeconds(+sec);
        return (d.getHours() ? d.getHours()+":" :"")+d.getMinutes()+":"+d.getSeconds();
    }

    var time = <?php echo($timeInSeconds) ?>;
    var newTime = 0;
    setInterval(function() {
        time += 1;
        var newTime = fromSeconds(time);
        $("#timediv").text("The current GMT time is:" + newTime);
    }, 1000);');
    ?>


更换

1
<?php $time = gmdate('H:i:s'); ?>

1
<?php $time = gmdate('h:i:s A'); ?>