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