1

年、月、日、時間、分、秒、ミリ秒でカウントダウンするタイマーを作成しようとしています。オンラインでいくつかのガイドを見つけましたが、理解しにくいか、ミリ秒を実行しません。たとえば、今週の金曜日の 13:30 に、誰か私がこのようなことをするのを手伝ってくれますか?

0y 0m 2d 2h 11m 50ms を読み取ることができます

ミリ秒をカウントダウンします。私が実際にこれを自分でやろうとしたことを示すコードを示しますが、恥ずかしいほどすべて失敗しました。

この記事も読んだので、javascriptタイマーを少し信用できなくなりました。これほど同期がずれているというのは本当ですか?

助けてくれてありがとう!

4

2 に答える 2

7

実装方法によって異なります。

時間を一度読み取って、精度を setInterval または setTimeout に依存する場合は、はい .. それらは同期しなくなる可能性があります。

計算で使用するために常に現在の時刻を取得すると、システムの残りの部分が同期しなくなるのと同じように、同期がずれることがあります...つまり、コンピューターのクロックに従います。

JavaScript / jQueryカウントダウンでの回答を変更して、取得するミリ秒を追加します

var end = new Date('13 Apr 2012 13:30:00');

var _second = 1000;
var _minute = _second * 60;
var _hour = _minute * 60;
var _day = _hour *24;
var timer;

function showRemaining()
{
    var now = new Date();
    var distance = end - now;
    if (distance < 0 ) {
       // handle expiry here..
       clearInterval( timer ); // stop the timer from continuing ..
       //alert('Expired'); // alert a message that the timer has expired..
    }
    var days = Math.floor(distance / _day);
    var hours = Math.floor( (distance % _day ) / _hour );
    var minutes = Math.floor( (distance % _hour) / _minute );
    var seconds = Math.floor( (distance % _minute) / _second );
    var milliseconds = distance % _second;

    var countdownElement = document.getElementById('timer');
    countdownElement.innerHTML = days  + 'd ' +
                                 hours + 'h ' +
                                 minutes + 'm ' +
                                 seconds + 's ' +
                                 milliseconds + 'ms';
}

timer = setInterval(showRemaining, 10);

ただし、28 ~ 31 日の月とうるう年を因数分解するには、より複雑な計算が必要になるため、月と年は処理されません。

http://jsfiddle.net/TaHtz/2/のデモ

于 2012-04-11T19:49:36.957 に答える
1

この js フィドルを試してください: http://jsfiddle.net/QH6X8/185/

endJavaScript の 1 行目に定義された変数で終了日を設定します。

1 ミリ秒ごとに更新したくない場合は、60 秒ごとに更新する jsfiddle を次に示します: http://jsfiddle.net/QH6X8/187/

于 2012-04-11T19:56:01.680 に答える