我需要服务器时间,而不是本地时间(JavaScript)

时间:2017-05-02 07:34:44

标签: javascript php time server

我有一个网站(www.Best11.org),我尝试使用JavaScript将服务器时间放在页脚中。我觉得一切都很好,但有些用户告诉我实际上是本地时间,而不是服务器时间......

这是脚本......

<script type='text/javascript'>
    var serverTime = <?php echo time() * 1000; ?>;
    var localTime = +Date.now();
    var timeDiff = serverTime - localTime;

    setInterval(function () {
        var realtime = +Date.now() + timeDiff;
        var date = new Date(realtime);
        // hours part from the timestamp
        var hours = date.getHours();
        if (hours < 10)
            hours = "0" + hours
        var minutes = date.getMinutes();
        if (minutes < 10)
            minutes = "0" + minutes
        var seconds = date.getSeconds();
        if (seconds < 10)
            seconds = "0" + seconds

        var formattedTime = hours + ':' + minutes + ':' + seconds;
        document.getElementById('clock').innerHTML = formattedTime;
    }, 1000);
</script>

出了什么问题? :|

1 个答案:

答案 0 :(得分:1)

time返回Unix时间戳。所以你正在做的是在客户端显示服务器的时钟时间,但在他们的时区。

如果要显示服务器的当前时间,则需要使用服务器本地时间作为传递给JavaScript代码的值。在此示例中,我使用getdate获取服务器上的本地日期/时间,然后为客户端代码构建了对Date构造函数的调用,以获取偏移量他们之间:

var serverTime = new Date(
    <?php $now = getdate();
          echo $now['year']  . ',' . ($now['mon'] - 1) . ',' . $now['mday'] . ',' .
               $now['hours'] . ',' . $now['minutes']   . ',' . $now['seconds'];
?>);
var localTime = Date.now();
var timeDiff = serverTime.getTime() - localTime;

脚本的其余部分保持不变。

我不做很多PHP,如果你能得到你当前的时区偏移并对time的值进行数学计算,我不会感到惊讶。但根本的答案是你不能在你发送客户端的时间内考虑服务器的时区,这就是为什么它似乎显示了客户端的时间(仅根据客户端的时钟)服务器)。