0

serverSync 関数で Keith Woods のカウントダウン タイマー (http://keith-wood.name/countdown.html) を使用しています。これは 1 つの国ではうまく機能しているように見えますが、別の国からのカウントダウンを確認すると、15 時間の違いがあるようです。

したがって、オーストラリアではカウントダウンは 1 日を示しますが、米国では 1 日 15 時間を示します。サイトで説明されているとおりにサーバー側のコードを実装しましたが、まだ時間差があります。ローカル時計を変更すると、カウントダウン時間が変更されますが、更新をヒットするとカウントダウンに正しい時間が表示されるため、サーバー時間が取得されていることがわかります。ただし、アメリカではまだ時差があります。

サーバー時間を読み取っている場合、これが考えられる理由はありますか?

function serverTime() { 
  var time = null; 
  $.ajax({url: 'server-time.php?random=' + Math.floor(Math.random() * 1000000), 
       async: false,
       dataType: 'text', 
       success: function(text) { 
          time = new Date(text); 
       }, error: function(http, message, exc) { 
          time = new Date(); 
       }}); 
       return time; 
    }

    var launchDate = "";

    $(function () {
       launchDate = new Date(
           2012,
           5-1,
           22,
           11
       );
       $('#launchCountdown').countdown('destroy')
       $('#launchCountdown').countdown({
                until: launchDate,
                serverSync: serverTime,
                format: 'DHMS', 
                expiryText: '<p>It\'s all over</p>'
                //onTick: highlightLast5
            });
        });
4

1 に答える 1

2

タイムゾーンの問題は自分で処理する必要があります。カウントダウンは、ドキュメントに従ってこれらの設定を自動的に適用します:

この日付と時刻は、サーバーのタイムゾーンを考慮に入れる必要があり、その時刻とクライアントの時刻との差は、開始または変更されたときにカウントダウンに適用されます。

したがって、クライアントの設定に基づいてスクリプトがロードされるため、クライアントのタイムゾーンが考慮されます。

さらに編集:

正確なコードがわからないと確信が持てませんが、これをGMTに設定してから、サーバー時間に設定するのではなく、サーバー時間にオフセットする必要があります。これにより、各タイムゾーンへのオフセットの問題が自動的に解決されます。したくない。したがって、まで使用します:

$(selector).countdown({ 
    until: new Date(2012, 8 - 1, 8)}); // add a date object with a timezone
$(selector).countdown({ 
    // create the offset based on your server timezone (e.g Sydney)
    // this overrides servertime with a static value that you want
    until: $.countdown.UTCDate(+10, 2012, 1 - 1, 26),  timezone: +10}); 
$(selector).countdown({until: '+1m -1d'}); // set it to one one day from now
于 2012-05-15T05:59:41.720 に答える