【问题标题】:I need server time, not Local time (JavaScript)我需要服务器时间,而不是本地时间 (JavaScript)
【发布时间】:2017-09-29 15:49:59
【问题描述】:

我有一个网站 (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>

怎么了? :|

【问题讨论】:

  • 顺便说一句,Date.now() 已经返回一个数字,因此无需使用+ 运算符。
  • 那么……我该怎么办?我真的需要服务器时间...(但不是静态的,用 php...)
  • 那么你需要一个基于特定时区的时间吗?
  • 是的。欧洲/布加勒斯特。
  • @StephenC UNIX 时间戳(自 1970 年以来的秒数)始终采用 UTC,无论计算机设置为哪个本地时区。这是根据定义。如果硬件时钟在某处使用了错误的时区,这意味着它的时钟只是普遍错误,我认为服务器偏移计算应该可以解决这个问题。

标签: javascript php time server


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

【讨论】:

  • 所以...我应该把它放在我的脚本中(在开始时)它应该可以工作吗?
  • @razvee:是的,只要你告诉 PHP 你的服务器的时区是什么。只需替换上面明确替换脚本中的三行即可。
  • 好的。让我们希望它会奏效。我会回来投票...:D
  • 你能查一下 www.Best11.org 吗? (应该是 11:11)
  • @razvee:对我来说是 11:33,这听起来不错,因为我在您发表上述评论后约 22 分钟才写这篇文章。 :-)(而我在英国现在是 9:33。)所以听起来你很好!
猜你喜欢
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 2015-09-05
相关资源
最近更新 更多