Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.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_Reactjs_Time_Setinterval - Fatal编程技术网

Javascript 下一分钟开始时的开始间隔

Javascript 下一分钟开始时的开始间隔,javascript,reactjs,time,setinterval,Javascript,Reactjs,Time,Setinterval,在我正在使用的日程表/日历应用程序中,我会显示一行以指示当前时间。我想每分钟更新一次这条线的位置 如果我在日历组件确实挂载或将挂载时启动setInterval函数,则会有一个更改,即它在59秒(或不是第一秒)开始,并且时间将始终不同于设备显示的时间(计算机、智能手机等) 但我希望这两个时间是匹配的。因此,我想知道是否有可能在新的一分钟开始时开始时间间隔,或者是否有其他方法获得时间更新 编辑:当前代码 componentDidMount() { setInterval(() => {

在我正在使用的日程表/日历应用程序中,我会显示一行以指示当前时间。我想每分钟更新一次这条线的位置

如果我在日历组件确实挂载或将挂载时启动setInterval函数,则会有一个更改,即它在59秒(或不是第一秒)开始,并且时间将始终不同于设备显示的时间(计算机、智能手机等)

但我希望这两个时间是匹配的。因此,我想知道是否有可能在新的一分钟开始时开始时间间隔,或者是否有其他方法获得时间更新

编辑:当前代码

componentDidMount() {
    setInterval(() => {
        this.setState({ currentTime: new Date() })
    }, 60 * 1000);
}

通过计算到下一分钟的秒数,并对差值执行超时,您可以非常接近

(函数showTime(){
console.log(“更新时间”);
var time=document.getElementById('time');
var now=新日期();
time.innerHTML=`${now.getHours()}:${now.getMinutes()}`;
setTimeout(showTime,(60-now.getSeconds())*1000);
})();

使用SetTimeout调用一个函数,该函数修复每次迭代的任何偏差,并使用新的SetTimeout调用重新启动

function repairAndRelaunch (cnt) {
    // capture current secs
    var secs = (new Date()).getSeconds();
    // relaunch with corrected seconds - limit iterations for testing
    if (5 > cnt++) setTimeout('repairAndRelaunch(' + cnt + ')', (60-secs)*1000); 
    // log to observe discrepencies
    console.log('for cnt = ' + cnt + ', secs = ' + secs);
};

// test control flow
window.onload = function() {repairAndRelaunch(0);};

只需在循环中使用新日期