2016-05-12 139 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