Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.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
从php获取时间并通过javascript进行更新_Javascript_Php_Time - Fatal编程技术网

从php获取时间并通过javascript进行更新

从php获取时间并通过javascript进行更新,javascript,php,time,Javascript,Php,Time,我想第一次从服务器获取时间,然后每秒用JavaScript更新一次。这是我的代码: setInterval(function() { var myvar = '<?php echo strtotime($now); ?>' var hours = myvar.getHours(); var minutes = "0" + myvar.getMinutes(); var seconds = "0" + myvar.getSeconds(); my

我想第一次从服务器获取时间,然后每秒用JavaScript更新一次。这是我的代码:

setInterval(function() {
    var myvar = '<?php echo strtotime($now); ?>'
    var hours = myvar.getHours();
    var minutes = "0" + myvar.getMinutes();
    var seconds = "0" + myvar.getSeconds();
    myvar=hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
    document.getElementById("time").innerHTML=myvar;
}, 1000);
setInterval(函数(){
var myvar=''
var hours=myvar.getHours();
var minutes=“0”+myvar.getMinutes();
var seconds=“0”+myvar.getSeconds();
myvar=hours+':'+minutes.substr(-2)+':'+seconds.substr(-2);
document.getElementById(“time”).innerHTML=myvar;
}, 1000);
但它在第二行有错误。错误是“myvar不是构造函数”。那么我该怎么做呢?

返回一个表示当前时间的整数

您将其作为字符串存储在变量中。
编译后的php文件如下所示:

setInterval(function() {
    var myvar = '1468845612'
myvar
只是一个普通的字符串。该字符串没有
.getHours
函数

var myvar
行替换为以下内容:

var myvar = new Date(<?php echo strtotime($now); ?>000);
注意我是如何在其中添加
000

strotime
以秒为单位返回时间戳。JavaScript的
Date
构造函数需要以毫秒为单位的时间戳


总之,
setInterval
调用是毫无意义的

php代码段在页面加载时只运行一次。然后,间隔每执行一秒都会显示相同的日期。

您可以使用.getHours(),.getMinutes()函数,仅用于javascript日期,而不用于php日期。您可以使用的一种方法是:

setInterval(function() {
    var myvar = new Date();
    var hours = myvar.getHours();
    var minutes = "0" + myvar.getMinutes();
    var seconds = "0" + myvar.getSeconds();
    myvar=hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
    document.getElementById("time").innerHTML=myvar;
}, 1000);

如果您使用php,则无法更新时间。第一个问题是,您的php正在回显一个整数,并将
myvar
设置为该整数。整数没有
getMinutes
getHours
。。。功能。相反,请使用
Date
对象

第二个问题是,您的函数没有真正提前时间,因为每次迭代,
myvar
都会重置为初始值(在浏览器下载页面之前,PHP echo只运行一次)。您需要的是
myvar
每次都保持正确的时间

第三个问题是您正在使用只运行一次的
setTimeout
。相反,您应该使用每秒运行的
setInterval

解决方案是在函数外设置一个
开始时间
时间,然后增加该时间并在每一轮中使用:

//PHP will set the start time
var start = <?=time()?>;

setInterval(function(){
    //add 1 second and set myvar to the correct current time
    start++;
    var myvar = new Date(start * 1000);
    ...
},1000);
//PHP将设置开始时间
var start=;
setInterval(函数(){
//添加1秒并将myvar设置为正确的当前时间
启动++;
var myvar=新日期(开始*1000);
...
},1000);
您可能需要做一个小的调整,因为PHP编写
start
值和JavaScript加载并在浏览器中运行之间需要一段时间。这将使JS时间稍微落后于服务器时间


您遇到了什么错误?您是否知道
'
不是服务器调用?就目前而言,您正在尝试每秒设置相同的时间。为什么这个问题会被否决?@belletJuice,因为OP没有显示或描述错误?@vascowhite很好,因为我第一次说需要服务器时间。谢谢您的回答是真的。如果我想使用hour:minute和updatetime(每分钟更新一次),该怎么办?我将start++改为start=start+60,将1000改为60000,但事实并非如此。你现在问的是另一个问题。我希望你所做的调整能起作用。如果他们没有,就提出一个新问题。展示新代码,你得到的结果,并解释你想要得到什么。
//PHP will set the start time
var start = <?=time()?>;

setInterval(function(){
    //add 1 second and set myvar to the correct current time
    start++;
    var myvar = new Date(start * 1000);
    ...
},1000);