2012-04-25 23 views
4

私はJavaScriptのタイマーをカウントダウンするオークションサイトを持っています。なんらかの理由で15-20分後にこのタイマーは実際の時間に20-30秒遅れています。 1時間のコースでは、javascriptのカウントダウンタイマーが少なくとも2-3分遅れることがあります。これは、オークションが終了するのにまだ2〜3分かかると思うので、ユーザーを混乱させる。 ページがサーバーにロードされるとオークションの残りの時間が2時間未満の時間になります& JavaScriptはそこからカウントダウンを開始します。だから私の質問は です。1)なぜJavaScriptのカウントダウンタイマーが実際の時間より数秒遅れて20〜30分後に数分遅れるのですか? 2)どのようにタイマーを同期させることができますか?他の多くのAjaxが動いているので、残り時間を得るためにajaxを使いたいとは思わない。 私のサーバーはPHPを使用しています。サーバーとJavaScriptのカウントダウンタイマーを同期させる方法

答えて

8

setTimeout()またはsetInterval()を使用しているため、タイマーが遅れています。彼らは信頼できません。正確な現在の時刻を取得する代わりにDateオブジェクトを使用してください。

同期する必要はありません。オークションの終了時刻(UTCで)を日付変数に入れ、それをカウントダウンします。

+0

こんにちはベルギー。これをどのように行うことができるか、小さなコードサンプルを教えてください。あなたの助けに感謝。 – Anita

+0

http://www.sitepoint.com/creating-accurate-timers-in-javascript/に例があります。要約すると、新しいタイムアウトを計算するには、 'Date.now()'を使います。次の "tick"がいつ起きるかを知っています。 – Bergi

+0

Excellet Bergi。これはまさに私が望んでいたものです。どうもありがとうございました。 – Anita

1
  1. Javascriptの時間は、おそらくあなたのjavascriptで起こって他の多くのもので遅れています。多くはあなたの特定のタイマー実装に依存しますが、Javascriptはシングルスレッドなので、他の操作ではタイマーが遅れることになります。

  2. サーバーと同期する唯一の方法は、要求を送信することです。それを排除することはできません。しかし、毎回ではなく、いくつかのカウントの後にのみリクエストを送信することができます。たとえば、タイマーを実行するたびにAJAXの同期要求が送信されます。あなたは、実験によって正しい同期期間を見つけることができます。

関連する問題