0

私はDjango でjQuery Countdown プラグインを使用して、すべてのビューに対して正確で同期されたデータを生成しています。

すべてのブラウザーに表示される時刻を同期するには、プラグインの serverSync 関数を使用して、次のように (例と非常によく似た) データを渡します。

function serverTime() { 
    var time;
    $.ajax({url: '/ajax/get-server-time/', 
        async: false, dataType: 'text', 
        success: function(text) { 
            time = new Date(text); 
        }, error: function(http, message, exc) { 
            time = new Date(); 
    }});
    return time;
}

そして、私のカウントダウンinitセレクター関数はそのままです(Djangoを介してendDatetimeの要素のデータにunixtimeを追加します):

function initAllTimers(selected){
    $(selected).each(function(){
        endDatetime = new Date($(this).attr("data-unixtime") * 1000);
        $(this).countdown({until: endDatetime, serverSync: serverTime});
    });
}

Django テンプレートは、次のようにカウントダウンを入力する各フィールドを生成します。

<span class="timeLeft" data-unixtime="1334898000"></span>

そして、次のようにこれらのフィールドにタイムカウントを適用します。

initAllTimers('.timeLeft');

最後に、Django ビュー メソッドまたはこのプラグインが取得するタイムスタンプを生成します (私の serverTime() メソッドを介して):

#points to /ajax/get-server-time/
def get_server_time(request):
    now = datetime.now()
    response = HttpResponse( now.isoformat())
    response['Expires'] = 'Fri, 1 Jan 2010 00:00:00 GMT'
    response['Content-Type'] = 'text/plain; charset=utf-8'
    response['Cache-Control'] = 'no-cache, must-revalidate'
    return response 

正しくレンダリングされますが、異なるコンピューター間で同期されません。私の Mac は、Windows コンピューターとは異なる残り時間を示します。

私はこの部分で間違いを犯していると思います:

カウントダウンの例のphpの例は$now->format("M j, Y H:i:s O")."\n";私のpython関数と同じdatetime.now().isoformat()ですか?

4

1 に答える 1

0

datetime.now().isoformat()と同一ではありません$now->format("M j, Y H:i:s O")

PHP のフォーマット エスケープについては、こちらで説明していますhttp://php.net/manual/en/function.date.php

strftime()Python でタイムスタンプを適切にフォーマットするために使用できます。ドキュメントはここから入手できますhttp://docs.python.org/library/datetime.html#strftime-strptime-behavior

.strftime("%b %d, %Y %H:%M:%S %z")PHPformat()呼び出しとほぼ同じである必要があります。から適切なオフセットを取得できない場合は、Python 文字列に自分自身を%z手動で追加できます。+0000

于 2012-04-14T15:04:51.977 に答える