【问题标题】:Reset countdown based on hour set根据小时设置重置倒计时
【发布时间】:2018-12-31 11:24:42
【问题描述】:

如何让我的计时器更动态地重置。我目前使用 new Date() 根据实时时间进行 12 小时倒计时。如果我想让计时器重置例如非常 2 小时,我需要更多的 if 和 else if 语句来做数学运算。

在不编写 20 个 if 语句的情况下循环此计时器的正确方法是什么? 目前,如果时间是 00:00 到 11:59,它将从 12 小时开始倒计时。一旦变成 12:01,我调用一个不同的等式,用 23 减去当前时间来确定新的倒计时时间。

如果我要进行每 4 或 2 小时而不是每 12 小时重置的倒计时,那么我需要创建更多 else if 语句,而我宁愿不这样做。

function timer() {
  var currentTime = new Date()
  var hours = currentTime.getHours() 
  var minutes = currentTime.getMinutes()
  var seconds = currentTime.getSeconds()
  if (hours < 12) { 
      var hoursLeft = 11 - hours; 
      var minsLeft = 60 - minutes;
      var secsLeft = 60 - seconds;

      if(minsLeft==60) {
        minsLeft=0;
        hoursLeft++;
      }

      if(secsLeft==60) {
        secsLeft=0;
        minsLeft++;
      }
  } else if (hours >= 12) {
    var hoursLeft = 23 - hours;
    var minsLeft = 60 - minutes;
    var secsLeft = 60 - seconds;

    if(minsLeft==60) {
        minsLeft=0;
        hoursLeft++;
    } 

   if(secsLeft==60) {
     secsLeft=0;
     minsLeft++;
    }
  }
}
var countdownTimer = setInterval('timer()', 1000);

codepen example

【问题讨论】:

    标签: javascript time timer


    【解决方案1】:

    这可能会有所帮助。我创建了另一个计时器,它清除第一个计时器,然后重新启动原始计时器功能。我不清楚这是否是您正在寻找的确切用途,但它应该让您朝着正确的方向前进。如果您希望重置到某个时间,您可以在启动 timer() 之前在 timerUpdate 函数中更改它。

    function timer() {
    	var currentTime = new Date()
    	var hours = currentTime.getHours() 
    	var minutes = currentTime.getMinutes()
    	var seconds = currentTime.getSeconds()
    	if (hours < 2) { 
    		var hoursLeft = 1 - hours; 
    		var minsLeft = 60 - minutes;
    	  var secsLeft = 60 - seconds;
    
    		if(minsLeft==60) {
    			minsLeft=0;
    			hoursLeft++;
    		}
        
    		if(secsLeft==60) {
    			secsLeft=0;
    			minsLeft++;
    		}
    	} else if (hours >= 2) {
    		var hoursLeft = 2 + 1 - hours;
    		var minsLeft = 60 - minutes;
    		var secsLeft = 60 - seconds;
    
    		if(minsLeft==60) {
    			minsLeft=0;
    			hoursLeft++;
    		} 
        
    	 if(secsLeft==60) {
    			secsLeft=0;
          minsLeft++;
    		}
    	}
      
    	document.getElementById('timerUpFront').innerHTML= "<br><strong>countdown</strong><br>"+ hoursLeft + " hours " + minsLeft + " minutes " + secsLeft + " seconds";
    }
    
    
    var countdownTimer = setInterval('timer()', 1000);
    var resetTimer = setInterval("timerUpdate()", 1000*60*4);
    
    function timerUpdate(){
      clearTimeout(countdownTimer);
      timer();
    }

    【讨论】:

    • 小时设置为负数 codepen.io/teomhk/pen/ZjKVQa 。我只是想创建一个简单的倒数计时器,每 X 时间重置一次。但我想使用 new Date() 来获取真实日期。这样,如果您在另一个浏览器时间中打开窗口,倒计时将是相同的。如果我不使用实时时间,那么倒计时将始终从每个新浏览器选项卡的开头开始。
    • 抱歉,我不清楚你所说的重置是什么意思(即你想重置什么)。如果您要重置特定的事物/时间,可以将其添加为 timerUpdate 函数中的一行。正是在这个函数中,您可以自定义您希望它的行为方式。希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多