2016-05-12 140 views
0

我需要一个简单的倒数计时器,但它真的让我感到困扰,我似乎无法得到它出于某种原因,我认为这是因为我需要它的特殊方式完成,它必须遵守这些规则:倒计时计时器每小时,但在30分钟的标记

  • 必须每隔一小时
  • 必须在30分钟大关
  • 必须使用UTC时间

因此,举例来说,它是07 :22 UTC,直到下一个8分钟即
如果是说,07:30,它会说1小时,直到下一个。
最后但并非最不重要的,如果是07:31,它会说59分钟,直到下一个。

我能够很容易地做到这一点,我为其他倒计时,但那些是在小时类型的事情,这并不复杂...我只是难倒大时间,请帮助我。

编辑 新增样本代码

 var d = new Date(); 
     var hoursUntil = 2 - d.getUTCHours() % 3; 
     var minutesUntil = 60 - d.getUTCMinutes(); 

     var timestr = ""; 

     if (minutesUntil === 60) { 
      hoursUntil++; 
      minutesUntil = 0; 
     } 

     if (hoursUntil > 0) { 
      timestr += hoursUntil + " hour" + (hoursUntil > 1 ? "s" : ""); 
     } 

     if (hoursUntil >= 1 && minutesUntil > 1) { 
      timestr += " and " + minutesUntil + " minute" + (minutesUntil > 1 ? "s" : ""); 
     } 

     if (minutesUntil > 1 && hoursUntil < 1) { 
      timestr += minutesUntil + " minute" + (minutesUntil > 0 && minutesUntil < 2 ? "" : "s"); 
     } 

     bot.sendMessage(msg, "Next event will be in " + timestr + "."); 
+1

听起来像家庭作业。到目前为止,你的代码是什么? –

+0

这不是作业,它是我的一个爱好项目,让我添加一小段代码,每小时工作3小时 – unlucky4ever

+0

我的时钟正在运行。 18:52直到下一个30分钟。来吧,展示你的代码。 –

回答

1

让我们做的一些想法。我们想知道的是,当下一次分钟显示30时。如果我们只想每半小时知道一次,我们可以像d.getUTCHours() % 3一样,将剩下的分数除以30。

但是,我们希望每60分钟获得一次,所以我们要做somethingInMinutes % 60。标记必须从60变为0,所以只需加30分钟。

要精确到秒,请计算秒数,添加当前秒数并从60分钟(3600秒)中减去两者。

我们想要一个触发每个第二班的定时器。计算1000和毫秒的差值。

<div>Seconds remaining until next 30 minutes mark: <span id="min-total"></span></div> 
<div>minutes:seconds remaining: <span id="min-part"></span>:<span id="sec-part"></span></div> 

<script> 
    var byId = document.getElementById.bind(document); 

    function updateTime() 
    { 
    var 
     time = new Date(), 
     // take 1800 seconds (30 minutes) and substract the remaining minutes and seconds 
     // 30 minutes mark is rest of (+30 divided by 60); *60 in seconds; substract both, mins & secs 
     secsRemaining = 3600 - (time.getUTCMinutes()+30)%60 * 60 - time.getUTCSeconds(), 
     // integer division 
     mins = Math.floor(secsRemaining/60), 
     secs = secsRemaining % 60 
    ; 
    byId('min-total').textContent = secsRemaining; 
    byId('min-part').textContent = mins; 
    byId('sec-part').textContent = secs; 

    // let's be sophisticated and get a fresh time object 
    // to calculate the next seconds shift of the clock 
    setTimeout(updateTime, 1000 - (new Date()).getUTCMilliseconds()); 
    } 
    updateTime(); 
</script> 
1

也许我失去了一些东西,但据我所看到的,UTC和一般其实时间是不相关的这一点。它应该像计算当前分钟的位置一样简单。

也许像

now = new Date(); 
minutes = now.getMinutes(); 
if(minutes > 30) { 
    minutes_until = (60 - minutes) + 30; 
    } 
else { 
    minutes_until = 30 - minutes; 
    } 
+0

美丽,非常感谢你,很难相信这么简单的事情对我来说太难了。 – unlucky4ever