从PHP获取时间并通过JavaScript进行更新

get time from php and update by javascript

本文关键字:JavaScript 更新 PHP 获取 取时间      更新时间:2023-09-26

我想第一次从服务器获取时间,然后每秒通过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);

但它在第二行有错误。错误是"myvar 不是构造函数"。那我该怎么做呢?

第一个问题是你的PHP正在回显一个整数并将myvar设置为该整数。 整数没有getMinutesgetHours...功能。请改用Date对象。

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

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

解决方案是在函数外设置一个start时间,然后递增它并每轮使用它:

//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 写入 start 值到在浏览器中加载和运行 JavaScript 之间会经过一些时间。这将使JS时间滞后于服务器时间。

现场演示

你可以只对javascript date使用.getHours(),.getMinutes()函数,而不是phpdate。您可以使用的一种方法是:

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,则无法更新时间

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

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

setInterval(function() {
    var myvar = '1468845612'

myvar只是一根普通的绳子,在那里。该字符串没有.getHours函数。

将该var myvar行替换为以下内容:

var myvar = new Date(<?php echo strtotime($now); ?>000);

渲染输出:

    var myvar = new Date(1468845612000);

请注意我是如何添加000的。

strtotime 返回以秒为单位的时间戳。JavaScript 的 Date 构造函数期望时间戳以毫秒为单位。


综上所述,setInterval呼吁毫无意义。

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