首页 > 解决方案 > 与服务器时间匹配的 Javascript 和 PHP 时钟

问题描述

我有一个显示实时数字时钟的 JS 代码,可以更正来自服务器的分钟/秒,因此如果其中一个客户端或多或少有几分钟,它会更正它们以匹配服务器时间。

<script>
    
    var serverTime = <?php echo (int) round(microtime(true) * 1000) ?>;
    var localTime = +Date.now();
    var timeDiff = serverTime - localTime;

    $(document).ready(function() {
        clockUpdate();
        setInterval(clockUpdate, 1000);
    });

    function clockUpdate() {

        var t = +Date.now() + timeDiff
        var date = new Date(t);

        $('.digital-clock').css({'color': '#fff', 'text-shadow': '0 0 0px #ff0'});
        function addZero(x) {
            if (x < 10) {
                return x = '0' + x;
            } else {
                return x;
            }
        }

        function twelveHour(x) {
            if (x > 12) {
                return x = x - 12;
            } else if (x == 0) {
                return x = 12;
            } else {
                return x;
            }
        }

        var h = addZero(twelveHour(date.getHours()));
        var m = addZero(date.getMinutes());
        var s = addZero(date.getSeconds());

        $('.digital-clock').text(h + ':' + m + ':' + s)
    }

</script>

现在脚本按预期工作,但我意识到当其中一个客户端设置为不同的时区时,时钟将与客户端上的小时匹配,

如果现在服务器上是 14:52 而客户端上是 15:52,它将显示 15:52 而我想要相反,我希望所有客户端上显示的所有时钟都与服务器上的确切时间匹配(14: 52)。

请帮我修改这段代码中的东西,不需要其他在线示例。

/*****************/

感谢所有认真对待并试图提供帮助的人(不像那些准备在我问它的同一秒投票结束问题的人)

我想进一步解释一下:

服务器位于法国,使用 GMT+1 和 DST

客户在突尼斯,同一时区 GMT+1,但 DST 不适用。但出于某种原因,突尼斯的许多客户可能不知道使用 DST。

这就是为什么页面上的时间必须与服务器和其他任何地方的时间完全相同的原因。

因此,我使用 PHPdate_default_timezone_set('Africa/Tunis');将服务器时间设置为突尼斯时区。

谢谢!

标签: javascriptphpdatetime

解决方案


好的,感谢所有试图提供帮助的人,我通过 Reinhard Schnetzinger 的回答解决了这个问题:

getUTCHours();
getUTCMinutes();
getUTCSeconds();

所以我使用的代码是:

var h = addZero(twelveHour(date.getUTCHours() + 1));
var m = addZero(date.getUTCMinutes());
var s = addZero(date.getUTCSeconds());

使用getUTCHours() + 1所需时间为 GMT+1


推荐阅读