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

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

怎么了? :|

最佳答案

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 的值进行数学运算,我不会感到惊讶。但根本的答案是,您在发送给客户端的内容中不允许使用服务器的时区,这就是为什么它似乎显示了客户端的时间(仅根据服务器的时钟)。

关于javascript - 我需要服务器时间,而不是本地时间 (JavaScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43732508/

相关文章:

php - 使用外键合并两个数据库时的 SQL 问题

php - 阿拉伯语编码的数据库问题

php - 通过 SSL 的非阻塞套接字连接?

java - 如何比较Time.sql

ruby - Time.to_i 是否总是以 UTC 返回自 EPOCH 以来的秒数?

javascript - 试图理解 jquery 中的 event.preventDefault

javascript - AngularJS:从 HTML 表中读取 Json 数据

c - 对 strftime() 的输出结果感到困惑

javascript - 如何用另一个 div(但是是外部 html 页面)替换一个 div?

javascript - 如何在 React Navigation 中的每个选项卡更改上有条件地渲染组件?