PHP & [JavaScript] - Übergabe von Zeitwerten, Logikproblem

se7en2

Cadet 4th Year
Registriert
Feb. 2010
Beiträge
89
Moin,

Ich steh grad irgendwie auf dem Schlauch, kann mich mal einer einen Schritt nach Vorne holen??

Folgendes Problem. Für einen Liveticker soll eine Zeit angezeigt werden, also 00:00, 00:01 usw. Das wird mit einem JavaScript erledigt und zur Anzeige gebracht. Der Anpfiff wird per PHP in eine MySQL Datenbank geschrieben. Das JavaScript berechnet anhand des Startzeitpunktes in der DB die Zeit für den Ticker (Übergabe der Zeit von PHP zu Javascript funzt). Also auch wenn jemand später den Liveticker anschaut wir die aktuelle Spielzeit korrekt wiedergegeben.

Nun ist aber folgendes, die in der DB abgespeicherte Zeit ist die Zeit des Servers und die Vergleichszeit im Javasrcipt ist die des Clients (läuft ja im Browser). Sind beide Zeiten identisch macht das nix, aber sitzt z.B. jemand in einer anderen Zeitzone und ruft den Ticker auf ist da völliger Quatsch drin.

Mir fällt da derzeit keine Lösung ein?!? Suche Ideen ;)

Hier in Kurzform:
- PHP MySQL Startzeit des Servers wird per PHP an JavaScript übergeben (Serverzeit)
- JavaScript berechnet anhand der Startzeit gegenüber der aktuellen Zeit (Client) die Spielminute (z.B. 25:22)
- Sind Server- und ClientZeit unterschiedlich, so ist exakt diese Differenz auch im Ticker wiederzufinden...

Was vergessen?

se7en.
 
Hi,

ruf beim Seitenstart per AJAX eine Methode auf, die dir die aktuelle Serverzeit mitteilt und benutzte die als JavaScript Startzeit. Lass die Clientzeit einfach komplett aussen vor und nutze die Serverzeit.

Aus:
JavaScript berechnet anhand der Startzeit gegenüber der aktuellen Zeit (Client) die Spielminute (z.B. 25:22)

Wird:
JavaScript berechnet anhand der Startzeit gegenüber der aktuellen Zeit (SERVER) die Spielminute (z.B. 25:22)

VG,
Mad
 
mhh, das Scipt läuft aber immer weiter, d.h. es wird jede Sekunde neu aufgerufen und ermittelt die aktuelle Zeit vom Client und berechnet den Fortschritt.

Eine Umstellung auf AJAX wäre natürlich eine Möglichkeit, da bin ich aber noch nicht wirklich fit drin. Ich komme aus der PHP-Welt und tu mich eh schwer mit java gedöhnse... aber gut...
 
Hi,

wieso ermittelst du jede Sekunde die Zeit vom Client? Wieso zählst du nicht einfach pro Sekunde den Wert nach oben? Hol dir beim Start einmal die Zeit vom Server oder gib die gleich einfach beim Seitenaufruf mit und rechne pro Sekunde "+1" bei diesem Wert. Und bei bestimmten Events ("Halbzeit" oder was auch immer) machst du einen bestimmte Methodenaufruf, der dann z.B. per AJAX wieder die Serverzeit holt oder wasauchimmer machen soll.


JAVA ist da nirgends dabei ;) JavaScript != Java. AJAX ist nur ein PHP-Seitenaufruf über eine Javascript Methode, da gibt es unzählige Vorlagen.

VG,
Mad
 
:sorry: JavaScript gedöhnse :D

Aber ich denke was mir weiterhilft ist: "Wieso zählst du nicht einfach pro Sekunde den Wert nach oben?" jo, so denke mach ich das einfach, zu Beginn einmal die aktuelle Zeit ermitteln (Server gegenüber Server) und dann einfach immer eine Sekunde weiter :örx:
 
Zuletzt bearbeitet: (DAAAAAAAAAAAAAAAANKE)
Du könntest http://www.w3schools.com/jsref/jsref_gettimezoneoffset.asp benutzen, aber das hat wie deine derzeitige Lösung ein Problem: du vertraust dem Client, was immer ne sehr schlechte Idee ist.

Die Antwort von Madman1209 ist richtig: Server bestimmt welche Zeit angezeigt wird. Aber wieso man da Ajax nutzen muss verstehe ich nicht. Der Server muss nur in den Seitenquelltext die aktuelle Zeit des Seitenabrufs eintragen und der Clientside Javascript Code kann dann von dem Zeitpunkt aus ganz normal weiterzählen. PHP erzeugt ja dynamische Seiten.
 
Hi,

gern geschehen ;)

Wenn du noch Hilfe brauchst lass es mich wissen. Habe hier schon ähnliche Sachen gemacht. Aber ich glaube du packst das auch so :)

Viel Erfolg!

@Mumpitzelchen

AJAX musst du spätestens dann nutzen, wenn du zwischendurch Synchronität gewährleisten willst oder prüfen willst, was auf dem Server passiert ist. An sich stimmt es natürlich, dass man die Serverzeit beim Aufruf mitgeben kann, habe ich ja auch so geschrieben, wenn du oben nachliest. Aber AJAX schadet bei seiner Anwendung sicher nicht und brauchen wird er es früher oder später sowieso bei einem Live-Ticker.

Und nur zur richtigstellung: PHP erzeugt keine dyamischen Seiten, PHP erzeugt dynamisch eine Seite. Das ist ein Unterschied! Die Seite selber ist statisch. Nicht dass hier Verwirrung aufkommt :)

VG,
Mad
 
Zuletzt bearbeitet:
@Mumpitzelchen: So gehts aber nicht, da ich den Startpunkt aus der Datenbank hole und das ist eine Serverzeit!

Danke euch beiden, ich frickel dann heute Abend mal weiter ;)

Jupp und AJAX kommt irgendwann wenn ich eh auf einen Reload der Seite verzichten möchte!!!
 
Hi,

genau deswegen dachte ich an AJAX :) Ist einfach zeitgemäß und wirklich nicht kompliziert. Dachte am Anfang auch "oh weh", wenn man dann aber mal sieht wie wenig Code dafür nötig ist und was man plötzlich für Möglichkeiten hat... genial :)

Schreib einfach, wenn es noch Unklarheiten gibt, hab da reichlich Code :)

VG,
Mad
 
Kannst du als Basis nicht die Unix Timestamp nehmen? Die ist überall auf UTC-Basis und somit ein einheitlicher Nenner.
 
Jetzt sagst Du das noch so einfach... warte wenn ich mal warmlaufe :D

@Daaron: Nee, das Format habe ich doch im Griff, nur die Client Zeit kann ich schlecht beeinflussen ;)
 
Kann es dir nicht egal sein, ob beim Client sinngemäß "Timestamp 1234 - Uhrzeit: 21:15" steht, obwohl der Server sagt "Timestamp 1234 - Uhrzeit 20:15"? Müssen die Zeitangaben denn alle in Serverzeit sein? Können die nicht in Ortszeit laufen?
 
Hi,

@Daaron

Wenn er eine Differenz berechnen will braucht er eine einheitliche Zeit. Dann kann er nicht einmal Server- und einmal Clientzeit nehmen. Das muss schon einheitlich sein :)

VG,
Mad
 
Die Timestamp IST einheitlich, denn sie wird weltweit in UTC berechnet. Erst bei einer Umrechnung in H:m (oder sowas) greifen die Systemeinstellungen zur Zeitzone.
 
Hi,

ok, dann fragen wir anders: Woher nimmt der Client bei einer Anfrage nach dem UTC Timestamp die Information bzw diesen Wert? Wenn du mit Javascript einen UTC-Timetamp machst: Woher nimmt er den Wert? Spätestens jetzt sollte es klingeln, dass da unabhängig von der Zeitzone beliebige Abweichungen zum Server sein können ;)

VG,
Mad
 
Zuletzt bearbeitet:
und es auch sind ;) Nicht jeder achtet auf eine genaue Uhrzeit auf seinem Rechner. Und einige Minuten Abweichungen machen das Ergebnis in meinem Fall untragbar ;)
 
Hi,

ja nicht nur das: einige Minuten sind ja schon schlimm, aber man sollte immer davon ausgehen, dass der Client böse ist und absichtlich z.B. das Jahr 2025 einstellt :) Sich auf Client-Einstellungen zu verlassen ist der Untergang für einen Webentwickler! :)

VG,
Mad
 
Wasn? Das schlimmste, was passieren kann: Der User kriegt die Anzeige, dass das Spiel schon 20 Jahre läuft. Spätestens hier sollte er merken, dass er evtl. seine Systemuhr mal stellen sollte.

Wenn du so herangehst: auch AJAX-Requests kannste fälschen. Wenn du es dem Client überlässt, die aktuelle Zeit vom Server zu holen (zwecks Berechnung), dann könnte hier wieder manipuliert werden. Aber auch hier gilt: Was der Client mti seiner Darstellung macht ist doch SCHEISSEGAL! Die Leute sind an ihrem Elend selbst schuld.
 
Hi,

also mit der Einstellung wird man als Entwickler nicht lange glücklich. "Naja, dann kaufen Sie sich doch einfach einen größeren Monitor, wenn nicht alles dargestellt wird"... ich denke, es sollte klar sein, dass ein guter Entwickler solche Dinge berücksichtigt.

Natürlich kann man auch AJAX-Requests fälschen, du kannst alles fälschen, solange eine Kommunikation vorausgesetzt wird. Wo da das Argument gegen saubere Programmierung sein soll erschließt sich mir nicht.

Fakt ist: Minimaler Aufwand, großer Mehrwert für den Kunden. Wenn die Seite eh nicht recht viel mehr macht als diesen Timer und der dann nicht funktioniert, weil ich vergessen habe meine Uhr richtig zu stellen dann kannst du das aber sowas von vergessen, dass ich da jemals wieder drauf gehe. Kunde verloren...

Vor allem: Wenn von den Timern ein Event ausgelöst wird möchte ich nicht so wie du behaupten "das schlimmste was passieren kann ist XYZ", da die implizierten Komplikationen dahinter weder dir noch mir klar sind.

Aber lassen wir solche Grundsatzdiskussionen: Mach du wie du meinst, ich mach wie ich mein und der TE überlegt sich, wie er es machen will, er hat ja jetzt genug Input :) Wollen wir so verbleiben?

VG,
Mad
 
Zuletzt bearbeitet:
Können wir durchaus...
Ein Aspekt ist aber evtl. noch ganz interessant: Die Art und Weise, wie einige Browser JS in Hintergrund-Tabs ausführen. Bei inaktiven Tabs kann man sich nicht darauf verlassen, dass ein Event, dass in 1s zünden soll, auch in 1s zündet. Das zündet wohl eher entweder in einigen Sekunden oder sogar erst, wenn der Tab wieder Fokus erhält. Sowas kann einem bei Countdowns oder so etwas derb den Tag versauen.
 
Zurück
Oben