2012-04-14 9 views
0

Ich verwende die jQuery Coundown plugin mit Django, um genaue und synchronisierte Daten für jede Ansicht zu generieren.Django und jQuery Coundown für Synced Countdown

Zum Zeitpunkt der Synchronisierung, die auf allen Browsern angezeigt wird, verwende ich serverSync function of the plugin die Daten zu übergeben (sehr ähnlich dem Beispiel) wie folgt aus:

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; 
} 

Und mein Countdown init Auswahlfunktion ist als solche (I hinzufügen Unix-Zeit, um Daten des Elements für die endDateTime über Django):

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

Django Vorlage erzeugt jedes Feld mit dem Coundown als solche gefüllt werden:

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

Und ich anwenden timecounting auf diesen Bereich wie wie folgt aus:

initAllTimers('.timeLeft'); 

Und schließlich Methode Django Ansicht oder Erzeugen von Zeitstempel für dieses Plugin (über meine Servertime() -Methode) abzurufen:

#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 

Es wird korrekt gerendert, aber es wird nicht über verschiedene Computer synchronisiert, mein Mac zeigt einen anderen Zeitunterschied zu meinem Windows-Computer.

Ich vermute, ich habe einen Fehler an diesem Teil machen:

Ist das PHP-Beispiel aus Countdown Beispiel $now->format("M j, Y H:i:s O")."\n"; gleich meine Python-Funktion datetime.now().isoformat()?

Antwort

0

datetime.now().isoformat() ist nicht identisch mit $now->format("M j, Y H:i:s O")

PHP-Formatierung Fluchten werden hier erklärt http://php.net/manual/en/function.date.php

Sie strftime() richtig verwenden können, um Ihre Zeitstempel in Python-Format; Die Dokumente sind hier verfügbar http://docs.python.org/library/datetime.html#strftime-strptime-behavior

.strftime("%b %d, %Y %H:%M:%S %z") sollte in der Nähe identisch mit dem PHP format() Anruf sein; Wenn Sie keinen geeigneten Offset von %z erhalten, können Sie +0000 manuell zur Python-Zeichenfolge hinzufügen.

+0

Entschuldigung für meine Ignoranz hier, aber ich kämpfe, wie kann ich ein Äquivalent zum PHP One machen? – Hellnar

+1

.strftime ("% b% d,% Y% H:% M:% S% z") sollte nahezu identisch sein. – cfedermann

+0

Danke cfedermann, die besagten strftime syns für die Zeit für meine lokalen Computer, aber sobald ich von einem entfernten Computer aus einer anderen Zeitzone checke, sind es 2 Stunden zurück, wie kann ich das beheben? Danke – Hellnar