Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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
到下一个5分钟的剩余时间-Javascript_Javascript - Fatal编程技术网

到下一个5分钟的剩余时间-Javascript

到下一个5分钟的剩余时间-Javascript,javascript,Javascript,我试图显示接下来5分钟的剩余时间(捕捉到当前时间的完整5分钟,例如15:05、15:10..) 在接下来的一个小时(而不是几分钟)的剩余时间内,我能够实现同样的目标: 函数secondPassed(){ var cur_date=新日期(); var hour=cur_date.getHours(); var minutes=cur_date.getMinutes(); var seconds=cur_date.getSeconds(); var minutes_remain=parseInt

我试图显示接下来5分钟的剩余时间(捕捉到当前时间的完整5分钟,例如15:05、15:10..)

在接下来的一个小时(而不是几分钟)的剩余时间内,我能够实现同样的目标:


函数secondPassed(){
var cur_date=新日期();
var hour=cur_date.getHours();
var minutes=cur_date.getMinutes();
var seconds=cur_date.getSeconds();
var minutes_remain=parseInt(59-parseInt(分钟));
var seconds_remain=parseInt(60-parseInt(秒));
var timers=document.getElementsByClassName('timer');
对于(变量i=0;i

jsIDLE:

这是您需要更改的内容,以使其按您想要的方式工作:

var minutes = cur_date.getMinutes();
var seconds = cur_date.getSeconds();
尝试将其更改为:

var minutes_remain = 5 - minutes%5 - 1;
var seconds_remain = 59 - seconds;
在这里试一试:

像这样的东西?
函数secondPassed(){
var cur_date=新日期();
var minutes=cur_date.getMinutes();
var seconds=cur_date.getSeconds();
var timers=document.getElementsByClassName('timer');
对于(变量i=0;i=50?“0:”)+(59-秒);
}
}
var倒计时=设置间隔(秒通过,1000)

将您的分钟数更改为以下行。它用5减去5来计算当前分钟mod,这就是您所需要的

function secondPassed() {
    var cur_date = new Date();
    var hour = cur_date.getHours();
    var minutes = cur_date.getMinutes();
    var seconds = cur_date.getSeconds();
    var minutes_remain = parseInt(5 - parseInt(minutes%5));
    var seconds_remain = parseInt(60 - parseInt(seconds));

    var timers = document.getElementsByClassName('timer');
    for (var i = 0; i < timers.length; i++) {
        timers[i].innerHTML = minutes_remain+":"+seconds_remain;
    }

}

var countdownTimer = setInterval(secondPassed, 1000);
函数secondPassed(){
var cur_date=新日期();
var hour=cur_date.getHours();
var minutes=cur_date.getMinutes();
var seconds=cur_date.getSeconds();
var minutes_remain=parseInt(5-parseInt(分钟%5));
var seconds_remain=parseInt(60-parseInt(秒));
var timers=document.getElementsByClassName('timer');
对于(变量i=0;i

更新的小提琴

如果你除以5,四舍五入,再乘以5,你可以算出下一个5分钟的间隔时间

如果您的时间正好是一分钟,则需要处理,否则
minutes\u remain
将显示为少1分钟

就准确度而言,您不需要在任何地方都
parseInt
,因为它们都是数字。我已经尽力使它尽可能有效。在任何情况下,您每秒只检查一次,因此无法保证准确性

函数secondPassed(){
var cur_date=新日期();
var hour=cur_date.getHours();
//句柄0秒-否则为60秒
var seconds_remain=60-(cur_date.getSeconds()| 60);
//处理ceil的时间为0秒,否则为1分钟
var minutes=cur\u date.getMinutes()+(剩余秒数==0?0:1);
var minutes_remain=数学单元(分钟/5)*5分钟;
var timers=document.getElementsByClassName('timer');
对于(变量i=0;i
您可以稍微减少代码,为了使其更准确,请使用setTimeout并在下一整秒钟内尽可能合理地调用该函数。设置间隔将缓慢漂移

// Return the time to next 5 minutes as m:ss
function toNext5Min() {

  // Get the current time
  var secs = (new Date() / 1000 | 0) % 300;

  // Function to add leading zero to single digit numbers
  function z(n){return (n < 10? '0' : '') + n;}

  // Return m:ss
  return (5 - secs/60 | 0) + ':' + z(60 - (secs%60 || 60));
}

// Call the function just after the next full second
function runTimer() {
  console.log(toNext5Min());
  var now = new Date();
  setTimeout(runTimer, 1020 - now % 1000);
}

如果你正在寻找机械时间并倒数5分钟,那么这可能会有所帮助-

var startTime = new Date();
function secondPassed() {

    var cur_date = new Date();

    if(parseInt((cur_date - startTime)/1000) >300 ){
        window.clearInterval(countdownTimer);
    }
    var hour = cur_date.getHours();
    var minutes = cur_date.getMinutes();
    var seconds = cur_date.getSeconds();
    var minutes_remain = parseInt(59 - parseInt(minutes));
    var seconds_remain = parseInt(60 - parseInt(seconds));

    var timers = document.getElementsByClassName('timer');
    for (var i = 0; i < timers.length; i++) {
        timers[i].innerHTML = minutes_remain+":"+seconds_remain;
    }

}

var countdownTimer = setInterval(secondPassed, 1000);
var startTime=new Date();
函数secondPassed(){
var cur_date=新日期();
如果(parseInt((当前日期-开始时间)/1000)>300){
窗口清除间隔(倒计时);
}
var hour=cur_date.getHours();
var minutes=cur_date.getMinutes();
var seconds=cur_date.getSeconds();
var minutes_remain=parseInt(59-parseInt(分钟));
var seconds_remain=parseInt(60-parseInt(秒));
var timers=document.getElementsByClassName('timer');
对于(变量i=0;i
一个简单的方法是5分钟等于5*60*1000毫秒,因此

var k = 5*60*1000;
var next5 = new Date(Math.ceil((new Date).getTime()/k)*k);

那么问题出在哪里呢?我需要它给出接下来五分钟的剩余时间,而不是下一个小时的剩余时间。有机会将秒数与机器时间同步,而不是与parseInt(60-parseInt(秒))同步;所以它变得更准确了?JavaScript将客户端时间与new Date()一起使用,所以这应该是准确的。再想一想,这里不需要parseInt(),因为Date().getSeconds()返回一个int。时钟现在从60-1秒开始计时,我已经将它更新为59-0,看起来应该更准确。非常感谢您的解释。有没有可能强制格式始终为MM:SS,因为当前如果剩余时间为04:01,它将显示为4:1,尝试以下操作:
timers[i]。innerHTML=(剩余分钟数<10?“0”:“)+剩余分钟数+”:“+(剩余秒数<10?“0”:“)+剩余秒数哦,糟糕,我把它改成了10,因为我为了测试的目的加快了日期变量的速度,但我忘了把它改回去。谢谢,太好了。有机会将秒数与机器时间同步,而不是与parseInt(60-parseInt(秒))同步;所以它变得更准确了?我不知道怎么解释,但是当第二个滴答声响起时,与实际的本地时间有毫秒的时差。如果我理解正确,那么如果您将最后一行更改为:
setTimeout(function(){var countdownTimer=setInterval(secondPassed,1000);},1000-新日期()%1000)
@mediaroot将在第一次调用时关闭,但之后会漂移,偶尔会跳过第二次。太好了。有机会将秒数与机器时间同步,而不是与parseInt(60-parseInt(秒))同步;所以它更像是一个
  return (5 - (secs? secs/60 : 5) | 0) + ':' + z(60 - (secs%60 || 60));
var startTime = new Date();
function secondPassed() {

    var cur_date = new Date();

    if(parseInt((cur_date - startTime)/1000) >300 ){
        window.clearInterval(countdownTimer);
    }
    var hour = cur_date.getHours();
    var minutes = cur_date.getMinutes();
    var seconds = cur_date.getSeconds();
    var minutes_remain = parseInt(59 - parseInt(minutes));
    var seconds_remain = parseInt(60 - parseInt(seconds));

    var timers = document.getElementsByClassName('timer');
    for (var i = 0; i < timers.length; i++) {
        timers[i].innerHTML = minutes_remain+":"+seconds_remain;
    }

}

var countdownTimer = setInterval(secondPassed, 1000);
var k = 5*60*1000;
var next5 = new Date(Math.ceil((new Date).getTime()/k)*k);