Javascript 一秒钟真的是一秒钟吗?

Javascript 一秒钟真的是一秒钟吗?,javascript,php,Javascript,Php,我有两个函数,理论上应该同时显示。它们确实会在一段时间内显示相同的时间,但很快就会失去同步 servertime函数如下所示: function servertime() { <?php date_default_timezone_set("Europe/London")?> var hours = parseInt(<?php echo date("H");?>); var mins = parse

我有两个函数,理论上应该同时显示。它们确实会在一段时间内显示相同的时间,但很快就会失去同步

servertime函数如下所示:

function servertime() {
            <?php date_default_timezone_set("Europe/London")?>
            var hours = parseInt(<?php echo date("H");?>);
            var mins = parseInt(<?php echo date("i");?>);
            var secs = parseInt(<?php echo date("s");?>);
            var interval = setInterval(function() {increment() }, 1000);
            function increment() {
                if (secs == 59) {
                    secs = 0;
                    if (mins == 59) {
                        mins = 0;
                        if (hours == 23) {
                            hours = 00;
                        }
                        else {
                            hours = hours + 1;
                        }
                    }
                    else {
                        mins = mins + 1;
                    }
                }
                else {
                    secs = secs + 1;
                }
                if (String(hours).length == 1) {
                    hoursprint = "0" + hours;
                }
                else {
                    hoursprint = hours;
                }
                if (String(mins).length == 1) {
                    minsprint = "0" + mins;
                }
                else {
                    minsprint = mins;
                }
                if (String(secs).length == 1) {
                    secsprint = "0" + secs;
                }
                else {
                    secsprint = secs
                }
                var result = hoursprint + ":" + minsprint + ":" + secsprint;
                document.getElementById("server-time").innerHTML = "<p>" + result +"</p>";
            }
        }
        servertime();
function clienttime() {
            var interval = setInterval(function() {increment() }, 1000);
            function increment(){
                var i = new Date();
                var hours = String(i.getHours());
                var mins = String(i.getMinutes());
                var secs = String(i.getSeconds());
                if (hours.length == 1) {
                    hours = "0" + hours
                }
                if (mins.length == 1) {
                    mins = "0" + mins
                }
                if (secs.length == 1) {
                    secs = "0" + secs
                }
                var result = hours + ":" + mins + ":" + secs;
                document.getElementById("client-time").innerHTML = "<p>" + result +"</p>";
            }

        }
        clienttime();
函数servertime(){
var hours=parseInt();
var mins=parseInt();
var secs=parseInt();
var interval=setInterval(函数(){increment()},1000);
函数增量(){
如果(秒=59){
秒=0;
如果(分钟==59){
分钟=0;
如果(小时==23){
小时=00;
}
否则{
小时=小时+1;
}
}
否则{
分钟=分钟+1;
}
}
否则{
秒=秒+1;
}
if(字符串(小时)。长度==1){
hoursprint=“0”+小时;
}
否则{
小时打印=小时;
}
if(字符串(分钟)。长度==1){
minsprint=“0”+分钟;
}
否则{
minsprint=分钟;
}
if(字符串(秒)。长度==1){
secsprint=“0”+秒;
}
否则{
秒冲刺=秒
}
var result=hoursprint+“:”+minsprint+“:”+secsprint;
document.getElementById(“服务器时间”).innerHTML=“”+result+”

”; } } servertime();
clienttime函数如下所示:

function servertime() {
            <?php date_default_timezone_set("Europe/London")?>
            var hours = parseInt(<?php echo date("H");?>);
            var mins = parseInt(<?php echo date("i");?>);
            var secs = parseInt(<?php echo date("s");?>);
            var interval = setInterval(function() {increment() }, 1000);
            function increment() {
                if (secs == 59) {
                    secs = 0;
                    if (mins == 59) {
                        mins = 0;
                        if (hours == 23) {
                            hours = 00;
                        }
                        else {
                            hours = hours + 1;
                        }
                    }
                    else {
                        mins = mins + 1;
                    }
                }
                else {
                    secs = secs + 1;
                }
                if (String(hours).length == 1) {
                    hoursprint = "0" + hours;
                }
                else {
                    hoursprint = hours;
                }
                if (String(mins).length == 1) {
                    minsprint = "0" + mins;
                }
                else {
                    minsprint = mins;
                }
                if (String(secs).length == 1) {
                    secsprint = "0" + secs;
                }
                else {
                    secsprint = secs
                }
                var result = hoursprint + ":" + minsprint + ":" + secsprint;
                document.getElementById("server-time").innerHTML = "<p>" + result +"</p>";
            }
        }
        servertime();
function clienttime() {
            var interval = setInterval(function() {increment() }, 1000);
            function increment(){
                var i = new Date();
                var hours = String(i.getHours());
                var mins = String(i.getMinutes());
                var secs = String(i.getSeconds());
                if (hours.length == 1) {
                    hours = "0" + hours
                }
                if (mins.length == 1) {
                    mins = "0" + mins
                }
                if (secs.length == 1) {
                    secs = "0" + secs
                }
                var result = hours + ":" + mins + ":" + secs;
                document.getElementById("client-time").innerHTML = "<p>" + result +"</p>";
            }

        }
        clienttime();
函数clienttime(){
var interval=setInterval(函数(){increment()},1000);
函数增量(){
var i=新日期();
var hours=String(i.getHours());
var mins=String(i.getMinutes());
var secs=String(i.getSeconds());
如果(小时长度==1){
小时数=“0”+小时数
}
如果(分钟长度==1){
分钟=“0”+分钟
}
如果(秒长==1){
secs=“0”+秒
}
var结果=小时+“:”+分钟+“:”+秒;
document.getElementById(“客户端时间”).innerHTML=“”+结果+”

”; } } clienttime();
由于后者每秒获取一次新的js时间,因此它与实际时间保持同步

为什么服务器时间功能不保持同步? 我犯了一个简单的错误吗?
一秒钟真的是一秒钟吗?

setInterval不是每XX秒执行一次。而是时不时地执行。这在很大程度上取决于您的脚本运行时。它需要完成的时间越长,你就越容易失去同步

为了适应这种情况,您需要保存上次运行的时间,然后将timeout设置为1秒-runtime

  • 服务器时间
    用词不当
  • 执行一个函数需要时间
  • setinterval
    表示函数将在1秒后执行一段时间。取决于操作系统etc正在做什么

  • 因此,您需要调用
    newdate()
    ,而不是试图推断它

    只是一个专业提示,您可以更改
    var interval=setInterval(function(){increment()},1000)->
    var interval=setInterval(增量,1000)如果您不需要在set Timeout/setInterval中向函数发送参数或保留/传递上下文,则可以简单地将函数作为第一个参数传递