Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我需要服务器时间,而不是本地时间(JavaScript)_Javascript_Php_Time_Server - Fatal编程技术网

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

我需要服务器时间,而不是本地时间(JavaScript),javascript,php,time,server,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 - l

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

var serverTime=;
var localTime=+Date.now();
var timeDiff=serverTime-localTime;
setInterval(函数(){
var realtime=+Date.now()+timeDiff;
var日期=新日期(实时);
//时间戳中的小时数部分
var hours=date.getHours();
如果(小时<10)
小时数=“0”+小时数
var minutes=date.getMinutes();
如果(分钟<10)
分钟数=“0”+分钟数
var seconds=date.getSeconds();
如果(秒<10)
秒数=“0”+秒
var formattedTime=hours+':'+minutes+':'+seconds;
document.getElementById('clock').innerHTML=formattedTime;
}, 1000);

怎么了|

time
返回Unix时间戳。因此,您要做的是在客户机上显示服务器的时钟时间,但在其时区内

如果要显示服务器的当前时间,则需要使用服务器本地时间作为传递给JavaScript代码的值。在本例中,我曾经获取服务器上的本地日期/时间,然后为客户端代码构建对
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;
var serverTime=新日期(
);
var localTime=Date.now();
var timeDiff=serverTime.getTime()-localTime;
脚本的其余部分保持不变


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

作为旁白,
Date.now()
已经返回了一个数字,所以不需要使用
+
操作符。所以。。。我该怎么办?我真的需要服务器的时间。。。(但不是静态的,使用php…)那么您需要基于特定时区的时间吗?是的。欧洲/布加勒斯特。@StephenC UNIX时间戳(自1970年以来的秒数)始终以UTC为单位,无论计算机设置为本地时区。这就是定义。如果硬件时钟在某个地方使用了错误的时区,这意味着它的时钟完全是错误的,我认为服务器偏移量计算应该可以解决这个问题。所以。。。我应该把它放在我的脚本中(在beggining),它应该会工作吗?@razvee:是的,只要你告诉PHP你的服务器的时区是什么。只需替换上面在脚本中清楚替换的三行即可。好的。让我们希望它能起作用。我会投赞成票回来…:你能在www.Best11.org上查一下吗?(应该是11:11)@razvee:对我来说是11:33,这听起来很对,因为我在你发表上述评论22分钟后才写这篇文章。:-)(而我在英国的时间是9:33。)听起来你很好!