0

一度に4時間カウントダウンし、0に達した後に再起動するタイマーが必要です。残り時間は、すべてのクライアントで同じである必要があります。私は現在これを持っています:

function addZero(i) {
  if (i < 10) {
    i = "0" + i;
  }
  return i;
}
setInterval(function() {
  function addZero(i) {
    if (i < 10) {
      i = "0" + i;
    }
    return i;
  }
  var d = new Date();
  var s = (d.getSeconds());
  var m = (d.getMinutes());
  var x = document.getElementById("timer");
  var c = addZero(30 - m) + ":" + addZero(60 - s);
  var d = addZero(60 - m) + ":" + addZero(60 - s);
  if (m < 30) {
    t = c
  } else {
    t = d
  }

  x.innerHTML = t;
}, 250)
<div align="center">
  <table>
    <tbody>
      <td style="font-size:15px;">Time to next restart:</td>
      <td style="font-size:16px;" id="timer"></td>
      <td nowrap="nowrap" width="15px">
        <p style="text-align: left;"></p>
      </td>
    </tbody>
  </table>
</div>

これは30分カウントダウンしてから、30にリセットされます。ただし、最後の1秒に達すると、59に直接移動するのではなく、60をカウントします(つまり、4:00/3:60/3:59)。また、東部標準時の正午(12pm)からカウントダウンする必要があります。時間をフォーマットで表示したいのh:mm:ssですが、上記のコードにも時間がありません。

4

1 に答える 1

0

client / JS Date()ではなく、PHPを使用して最初のページの読み込み時に日付/時刻を取得します-これはマシン間で大きく異なる可能性があるため、クライアントを同期させたい場合は価値がありません(PHPの日付はサーバークロックから取得されるため、正しければ、複数のクライアントを同期できます)。この時間をベースとして、クライアントで4時間カウントダウンしても、時間の同期がうまくいくとは限りません。サーバーを定期的に参照して同期します。

60が表示される問題については、コード内の数字を次のように置き換えることはできません。

var d = addZero(60 - m) + ":" + addZero(60 - s);

になります

var d = addZero(59 - m) + ":" + addZero(59 - s); 

戻り値は常に0〜59であるため、これは逆になり、マイナスの数値は表示されず、デジタル時計が実際にどのようになるかが表示されます(60分/秒に達することはありません。リセットされます) 0に)。

サーバーを定期的に参照するのは無意味なので、JSで分/秒のカウントを行います-同期を行ったときに不一致に気付いた場合、長く放置しなければ高すぎない可能性がありますチェック間の時間(4時間など)。

これは実際には何のためですか?

于 2013-02-02T02:28:47.987 に答える