2016-05-12 19 views
0

私は単純なカウントダウンタイマーが必要ですが、何らかの理由でそれを得ることができないと私は本当に迷惑で、私はそれが必要な特別な方法のためだと思う行われ、それはこれらの規則を遵守しなければならない:毎時30分のカウントダウンタイマー

  • は30分のマーク
  • 上にある必要があり、毎時間はUTC時間

だから例えば、それは07で使用する必要がありますにする必要があります:22 UTC、次の日まで8分e。
07:30と言ったら、次の時間まで1時間と言います。
最後に、07:31だったら次の59分までと言います。

私が作った他のカウントダウンのためにこれを非常に簡単に行うことができましたが、それは時間型のもののためのものでしたが、これは複雑ではありませんでした...私は大きな時間を切っただけです。

EDIT 追加のサンプルコード

 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

それは宿題ではありません、それは私が私の時計が実行されている – unlucky4ever

+0

時間に3時間ごとのために動作するコードのスニップを追加してみましょう、私の趣味のプロジェクトのためです。 18:52まで30分をマークする。さあ、あなたのコードを見せてください。 –

答えて

1

のようなものだが、いくつかの考えをやってみましょう。私たちが知りたいのは、次回の分針が30になるときです。30分おきにしか知りたくないのなら、d.getUTCHours() % 3のように30分の残りの分を取ることができます。

しかし、60分ごとに取得したいので、somethingInMinutes % 60を実行しています。マークは60から0にシフトする必要があるので、30分を追加してください。

精度を秒単位で計算するには、秒単位で計算し、現在の秒を加算し、60分(3600秒)から両方を減算します。

我々は、すべての第2シフトでトリガータイマーをしたいです。 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

関連する問題