anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Mo 09 Jun, 2025 12:37

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Zeitstop? o.O
BeitragVerfasst: Mi 04 Aug, 2004 07:32 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 02 Mär, 2004 18:16
Beiträge: 1206
also folgendes prob.

HavoC raunzt dir genervt entgegen, dass du noch 0h, 59m, 59s hier bleiben musst, wenn du nicht weiter für ihn arbeiten willst.

und der zählt die min/sec nich zurück...


mfg

_________________
R.I.P.
†26.7.2004 - 20.3.2006†
†MeteorA†


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 04 Aug, 2004 11:59 
Offline
Admin
Admin
Benutzeravatar

Registriert: Di 21 Jan, 2003 01:11
Beiträge: 1604
Wohnort: Haßfurt
Geschlecht: Männlich
LoGD: http://www.anpera.net/logd
Skype: anpera-net
README.txt lesen, Suchfunktion fragen ;)

-->Spieltagstartzeiten

Ich hab die Zeitberechung in diesem Paket für Windows Server modifiziert. Wenn du das Paket von hier auf einem Linux-Server laufen lässt, musst du diese Änderungen rückgängig machen. Wie das geht, steht in der README.txt im aktuellen Paket.
Alternativ kannst du auf das demnächst erscheinende neue Paket warten, das dieses Problem nicht mehr haben dürfte (neue Berechnungsformel von Chaosmaker), allerdings weiß ich nicht, wie deine übrigen Mods auf das neue Paket reagieren werden.

Ansonsten alles Gute zum Geburtstag! :)

_________________
Praxis ist, wenn alles klappt aber keiner weiß warum. Theorie ist, wenn man weiß wie es geht, aber nichts klappt. Wir haben beides erfolgreich vereinigt: Bei uns klappt nichts und keiner weiß warum!

Neues Video: Marios freier Tag in Second Life


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 04 Aug, 2004 12:50 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 02 Mär, 2004 18:16
Beiträge: 1206
dann warte ich halt^^


PS:

thx ;)

_________________
R.I.P.
†26.7.2004 - 20.3.2006†
†MeteorA†


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 13 Aug, 2004 07:31 
Offline
Eingeweihter
Eingeweihter

Registriert: Do 12 Aug, 2004 13:02
Beiträge: 91
Mein Server ist Linux Basierend und ich habe die Timestamp Ä derungen wie im readme Beschrieben gemacht. Mein Problem ist nun, das die Uhr nirgends sichtbar weisterläuft, es im Dorf immer 3:00 ist und die Zeit nicht runtergezählt wird.

Intern läuft die Zeit aber und wenn man weiss, wann der neue Tag kommt ist er auch da, aber die steht nach wie vor und zeigt noch immer 3:00 an.

Irgendeine Idee ?

PS: Ich benutz PHP5


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 13 Aug, 2004 15:34 
Offline
Admin
Admin
Benutzeravatar

Registriert: Di 21 Jan, 2003 01:11
Beiträge: 1604
Wohnort: Haßfurt
Geschlecht: Männlich
LoGD: http://www.anpera.net/logd
Skype: anpera-net
Also die Spielzeit dürfte - wie ich schon auf DragonPrime geschrieben habe - nicht stehen bleiben, selbst wenn noch überall 198x drin steht.

Nachdem du ja einen Testlauf mit dem offiziellen 0.9.7 Release von Sourceforge gemacht hast, scheint es tatsächlich auf ein allgemeines Problem von LoGD mit PHP5 rauszulaufen.

Ich hatte LoGD 0.9.7 ext GER mal mit dem prerelease1 von PHP5 getestet und konnte damals keine Fehler feststellen. Nachdem aber das Forum nicht mehr gelaufen ist, habe ich PHP5 für meinen Server vorerst abgehakt.


So hart das klingt, aber momentan sieht es so aus, also ob du nur 4 Möglichkeiten hast:

1) Den Fehler selbst finden und ausbessern. (Würde mich freuen, wenn du den "Bugfix" irgendwo bekannt geben würdest.)

2) Auf die letzte Version von PHP 4 wechseln, denn dafür wurde LoGD 0.9.7 geschrieben.

3) Auf den eigenen LoGD-Server oder auf die korrekte Zeitanzeige verzichten. (Selbst LoGD 0.9.8 prerelease.2 wird dieses Problem noch haben. Der final Release - bzw. eine der nächsten prereleases - wird eine neue Berechnungsfunktion nutzen.)

4) Ansonsten rate ich dir das Selbe wie Meteora. Warte auf das letzte ext GER Paket, denn das enthält eine neue Berechnungsformel für die Spielzeit, die unter Windows und Linux gleichermaßen funktionieren und auch unter PHP5 keine Probleme verursachen sollte.

_________________
Praxis ist, wenn alles klappt aber keiner weiß warum. Theorie ist, wenn man weiß wie es geht, aber nichts klappt. Wir haben beides erfolgreich vereinigt: Bei uns klappt nichts und keiner weiß warum!

Neues Video: Marios freier Tag in Second Life


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 13 Aug, 2004 15:44 
Offline
Eingeweihter
Eingeweihter

Registriert: Do 12 Aug, 2004 13:02
Beiträge: 91
zu PHP4 wechsel fällt aus, da es nicht mein Server ist. Derzeit stelen viele ISP's auf PHP5 um und es wird so einige User mit Bösen überraschungen geben, nicht nur bei LoGD. zum Glück kriegt man meist Fehlermeldungen und kann globlae Variablen Namen ändern oder ' ' setzen.

In diesem speziellen Fall gibts ja noch nicht mal ne Meldung, so das ich davon ausgehen, das sich die Funktionalität von irgendwas geändert haben muss. Ich werde mich heute abend auf PHP5 stürzen und mich in die Zeit und Stringbhandlungsfunktionen einlesen und an der Testinstallation von LoGD meine versuche vornehmen. Kann ja eigendlich nicht das riesen Problem sein. Mal sehen ... Wenn ich ne Lösung finde, schreib ich es hier.

Seh ich das richtig, das die eigentliche Time Routine in common.php sitzt und die anderen Scripte darauf aufbauen ? Ich werde erst mal zu debugzwecken nen paar Outputs reinsetzen und sehen, wo was rauskommt. Da der eigentlich Get Time vom Server geht muss irgendwas in der Stringzerlegung oder Berechnung falsch sein.

Ansonsten warte ich nartürlich auch auf das nächste Release Pack.

/edit (update): Das Problem liegt wohl am php5 selber und einem Bug in der strtotime funktion. siehe: http://bugs.php.net/bug.php?id=28774&edit=1

Ich les grade auf Heise, das heute ein php5 Update erschienen ist. Mal sehen ob mein Provider fix ist. Einen Programierworkaround hab ich auch schon gesichtet:

$str=date('r');
$strtime = strtotime("$str +10 Minutes");

das soll gehen. Bei normaler verwendung kommt -1 raus. Mal sehen, ob ich das umsetzen kann. Vertrackt.

/edit 2: Hier noch mal genauer: http://bugs.php.net/bug.php?id=28209

Anscheinend wurden die Zeitfunktionen bei PHP5 dahingehend überarbeitet, daß sie sich an die GNU-Vorgaben anlehnen.
Ob beabsichtigt oder nicht, dies führt dazu, daß now nur noch das Datum und keine Uhrzeit mehr enthält und auch bei anderen Funktionen die Uhrzeit nicht mehr berücksichtigt wird ...

/edit 3: Ich habe mir nochmal den Code von Common, Index, configuration und About angesehen. Da wird an einigen Stellen gebrauch von 'now' gemacht. Ich bin mir nun fast sicher, das dies das eigentliche Problem ist. Ich versuch grade das now durch $str zu ersetzen, welches ich vorher mit $str=date('r'); definiere. Klappt noch nicht. Scheinbar habe ich noch nicht das richtige Format. Ich probier grade einige Kombinationen aus, mal sehen ....

Danke und Gruß


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 13 Aug, 2004 20:05 
Offline
Eingeweihter
Eingeweihter

Registriert: Do 12 Aug, 2004 13:02
Beiträge: 91
Ich bin mit meinen Möglichkeiten am Ende. Zusammenfassung meiner Recherchen und Tests:

der Parameter "now" bei strtotime("now") liefert nur noch Datum, keine Zeit. Also habe ich alle Scripte nach strtotime("now") durchsucht und vor die Zeile wo es auftaucht folgendes gesetzt:

$jetzt=date('r');

und dann strtotime("now") durch strtotime("$jetzt") ersetzt. Das sind einige scripte, mal global durchsuchen.

Das dies erst mal stimmt, kann man mit folgendem kleinem Testscript sehen:


$time1 = strtotime("now");
echo("Time Now = $time1 <br>");

$str2=date('d F Y h:i:s A');
$time2 = strtotime("$str2");
echo("Time Date d F Y h:i:s A = $time2 <br>");

$str3=date('r');
$time3 = strtotime("$str3");
echo("Time Date r = $time3 <br>");


beim schnellen aktualisieren bleibt die erste Ausgabe stehen und die beiden darunter aktulisieren bestens. Ich habe zum testen 2 verschiedene Datumsformate ausprobiert und beide liefern nach dem Umwandeln das selbe Ergebnis.

Das sollte jetzt mal die Basis sein. Warum es nun trotzdem noch nicht geht, entzieht sich meinem Verstand. Da muss es noch ein weiteres Problem geben, was ich so nicht erkennen kann. Dieser Workaround für die "now" Sache wird jedenfalls in allen Foren vorgeschlagen die ich ergoogled habe.

Jetzt muss ich hoffen, das hier irgendjemand eine Erleuchtung hat. Wer auf PHP5 testen will, dem kann ich einen FTP Account zur Verfügung stellen und eine frische Basisinstallation von LoGD.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 13 Aug, 2004 21:15 
Offline
Admin
Admin
Benutzeravatar

Registriert: Di 21 Jan, 2003 01:11
Beiträge: 1604
Wohnort: Haßfurt
Geschlecht: Männlich
LoGD: http://www.anpera.net/logd
Skype: anpera-net
Gute Arbeit Zarzal!
Ich hab den Workaround bei mir mal eingebaut und zumindest unter PHP 4 läuft alles wie gehabt. Nachdem der Fehler in strtotime() bei LoGD nicht zum Tragen kommt, solltest du auch ohne das Update klar kommen.

Versuch mal folgendes bei dir:
(Das enthält eine Zeitberechnungsformel nach Chaosmaker. Die aktuelle Berechnungsformel ist noch etwas ausgeklügelter, aber zum Testen reicht die hier ;) )

[php]
//// Öffne: common.php
//// Finde:
$time = convertgametime(strtotime("now"));

//// Ersetze es durch:
$time = convertgametime(strtotime(date("r")));

//// Finde:
function convertgametime($intime){
$time = (strtotime(date("1981-m-d H:i:s",strtotime("-".getsetting("gameoffsetseconds",0)." seconds",$intime))))*getsetting("daysperday",4) % strtotime("1981-01-01 00:00:00");
return $time;
}

//// Ersetze es durch:
function convertgametime($intime){
// A new way by Chaosmaker.
// Note that there are some problems with new months,
// new years and daylight savings time!
$multi = getsetting("daysperday",4);
$time = mktime(date('H',$intime)*$multi,
date('i',$intime)*$multi,
(date('s',$intime)-getsetting("gameoffsetseconds",0))*$multi,
4,
date('d',$intime)*$multi,
2004);
return $time;
}[/php]

Wenn damit die Spielzeit unter PHP 5 läuft, melde dich. Die Anzeige zum nächsten Spieltag müsste auch laufen.

Willst du deine Entdeckung nicht auch auf DragonPrime bekannt geben? Da hat noch jemand ein Problem mit PHP 5, das auf dem selben Problem mit "now" beruht.

_________________
Praxis ist, wenn alles klappt aber keiner weiß warum. Theorie ist, wenn man weiß wie es geht, aber nichts klappt. Wir haben beides erfolgreich vereinigt: Bei uns klappt nichts und keiner weiß warum!

Neues Video: Marios freier Tag in Second Life


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 13 Aug, 2004 21:28 
Offline
Eingeweihter
Eingeweihter

Registriert: Do 12 Aug, 2004 13:02
Beiträge: 91
*big bow*

Das wars ! ES GEHT. Ich geh jetzt noch mal die Scripte durch um deine etwas elegantere schreibweise für das "now" Problem einzubauen und mach dann eine Zusammenfassung. Ich Poste das dann entweder noch heute nacht oder morgen in Ruhe für alle, die auch PHP5 einsetzen.

Dieses Problem scheint nun gelöst zu sein, mal sehen, was ich noch finde.

Endlich kann ich mich vor meinen Usern wieder sehen lassen, die haben schon die Adminhölle angewärmt :???:

Endlich wieder spielen :P


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 13 Aug, 2004 21:56 
Hehehe als stiller Mitleser kann ich mich ja dazu auch mal äußern... ;)

Wie schon erwähnt, ist mit PHP5 eine Umstellung auf GNU-now erfolgt. Das ist nicht das 'echte' now, sondern 'heute, 00:00:00 Uhr'.
Angeblich wird drüber nachgedacht, das in einer späteren Version von PHP5 wieder rückgängig zu machen, bisher ist aber in die Richtung noch nix geschehen.

Die Änderung des now war schon richtig, ist aber nicht ausreichend. Ebenso müßten alle Stellen, die mit '+XXX seconds' u.ä., also mit relativen Angaben, rechnen, geändert werden.
Im Prinzip also nahezu alle strtotime-Anwendungen.


Nach oben
  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 13 Aug, 2004 22:08 
Offline
Eingeweihter
Eingeweihter

Registriert: Do 12 Aug, 2004 13:02
Beiträge: 91
Trotzdem erst mal Danke. Zumindest geht jetzt mehr wie vorher. Das was ich bislang gelesen habe betrifft eigentlich nur den "now" parameter der Funktion. Aber sicher könntest Du recht haben, nur artet das dann wirklich in Arbeit aus.

Ich muss mal sehen, ob die von Dir erwähnten rechenoperationen funktionieren. Bislang seh ich keinen Grund, warum sie das nicht tun sollten, solange man nicht "now" verwendet.

In der von Dir entwickelten gametime Routine steht ja noch nen Kommentar mit den Monatswechseln. Was ist da zu erwarten ? Wie könnte sich das äußern ? Nur damit ich vorbereitet bin und ne warnung an die USer rausgeben kann.

Das einzigste, was mir bislang auffällt ist, das sich meine Anzeige welche User Online sind nicht richtig updatet. Da muss ich mal sehen ob da irgendwo flasche werte durch die grobe Rundung von "now" abgespeichert wurden. Wenn ich mir das recht überlege, müsste sic das aber morgen von selbst lösen, ich beobachte das mal.

Letztendlich scheint mir eine komplette modernisierung mit Blick auf PHP5, das immer stärker kommt, unvermeidlich.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 14 Aug, 2004 04:35 
Offline
Admin
Admin
Benutzeravatar

Registriert: Di 21 Jan, 2003 01:11
Beiträge: 1604
Wohnort: Haßfurt
Geschlecht: Männlich
LoGD: http://www.anpera.net/logd
Skype: anpera-net
Ich hab die Infos mal JT zukommen lassen.
Klingt schon logisch, dass die ganzen strtotime("+ xy whatever") nimmer funktionieren. Würde denn stattdessen strtotime(date('r')."+ xy whatever") oder strtotime("+ xy whatever",strtotime(date('r'))) funktionieren?

Zu den Kommentaren in Chaosmakers convertgametime:
Die Kommentare stammen von mir. Auf der Suche nach einer neuen Berechnungsformel für 0.9.8 hat JT die Funktion ausgiebig getestet und viel versucht, um die Probleme zu beseitigen. Naja, das Ergebnis war jedenfalls, dass bei Monatsechseln sehr kurze oder sehr lange Spieltage auftreten können. Bei Jahreswechseln wird die Zeitdifferenz zum Vor-Spieltag sogar negativ - kein Schimmer, wie sich das äußern wird. Bei der Umstellung von Sommer- auf Winterzeit (und umgekehrt) stimmen die Spieltagzeiten voraussichtlich nicht mit den Tageswechseln überein.

Die User Online:
Selbes Problem wie mit der Spielzeit vermute ich mal. strtotime() zur Ermittlung von Zeitunterschieden. Das selbe Problem tritt auch mit 0.9.8 unter PHP 5 auf (siehe DragonPrime). Weia, das betrifft sicher auch die zeitweise PvP-Immunität und was-weiß-ich-was-noch...

Aktualisierung auf PHP 5
Früher oder später sicher, aber solang PHP 5 nicht richtig funktioniert, bzw. die Entwickler unsere Rechtschreibreform auf das Datumshandling übertragen wollen (gestern so, heute so, morgen vielleicht wieder anders), wird das wohl nix. JT und MightyE sind sich da einig und werden erstmal keine Zeit investieren, um LoGD an PHP 5 anzupassen. Ich selbst bin von PHP 5 bisher auch eher enttäuscht. (Hatte es hier ja schon drauf, aber mit jedem release candidate ist weniger gelaufen.)

Trotzdem würde ich, falls sich jemand (du? *g*) die Arbeit macht, die Probleme zu finden und zu beseitigen, die nötigen Änderungen für PHP 5 noch in das nächste Paket von ext GER übernehmen. (Sofern dadurch keine Probleme mit PHP 4 entstehen.) Ich bin mir auch ziemlich sicher, dass so ein "Patch" für 0.9.8 ebenfalls gern gesehen wäre und vielen auf DragonPrime helfen kann. ;)

Neue Zeitfunktion:
Ok, nachdem ich eine Bestätigung bekommen habe, dass diese Funktion tatsächlich funktioniert, kann ich sie schonmal veröffentlichen. Das hier ist die aktuelle Berechnungsfunktion, wie sie im nächsten Paket (und in nochmals verbesserter Form in 0.9.8 ) enthalten sein wird. Sie läuft unter Windows und Linux gleichermaßen und verkraftet Sommer- und Winterzeit, Monatswechsel, Jahreswechsel und Schaltjahre bis ins Jahr 2021. 1 - 28 Spieltage pro Tag sind damit bei beliebigem Offset möglich.

[php]
//// Öffne: common.php
//// Finde:
function convertgametime($intime){
...
}

//// Ersetze es durch:
function convertgametime($intime){
$multi = getsetting("daysperday",4);
$offset = getsetting("gameoffsetseconds",0);
$fixtime = mktime(0,0,0-$offset,date("m")-$multi,date("d"),date("Y"));
$time=$multi*(strtotime(date("Y-m-d H:i:s",$intime))-$fixtime);
$time=strtotime("+".($multi*date("I",$intime))." hour",$time);
$time=strtotime("-".date("I",$time). " hour",$time);
$time=strtotime("+".(23-$multi)." hour",$time);
return $time;
}[/php]

Teste doch bitte mal, ob die mit PHP 5 läuft. Ich könnte mir vorstellen, dass sie tut :)

_________________
Praxis ist, wenn alles klappt aber keiner weiß warum. Theorie ist, wenn man weiß wie es geht, aber nichts klappt. Wir haben beides erfolgreich vereinigt: Bei uns klappt nichts und keiner weiß warum!

Neues Video: Marios freier Tag in Second Life


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 14 Aug, 2004 07:30 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 02 Mär, 2004 18:16
Beiträge: 1206
Funktionirt einwandfrei!


thx!

mfg

_________________
R.I.P.
†26.7.2004 - 20.3.2006†
†MeteorA†


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 14 Aug, 2004 08:33 
Offline
Eingeweihter
Eingeweihter

Registriert: Do 12 Aug, 2004 13:02
Beiträge: 91
Guten morgen.

Nun, das keine energie in die PHP5 kompatiblität reingesteckt wird und man sich auf andere konzentiert ist eine Entscheidung, die man ihnen nicht abnehmen kann. Ich verweise nur auf die ISP's wie Host Europe (nicht grade klein) die im Oktober zwangsweise umstellen. Wer dann keinen eigenen Server hat bekommt in einem solchen Fall Probleme.

Ich habe auch ziemlich geflucht als mein Server auf PHP5 umgetellt wurde. Das waren 2 Tage Arbeit um alles wieder zum laufen zu bekommen. Besonderer Verdruss bereiten die reservierten Variablen.

So, genug davon. Zu der neuen Zeitroutine: unter PHP5 geht sie nicht, die Uhrzeit steht wieder wenn man diese verwendet. Ich benutze nun wieder die darüber.

Meine beobachteten Probleme mit der Onlineanzeige der Spieler haben sich, wie vermutet, mit dem beginn eines neuen Real Life Tages gelöst. Durch das spielen mit der Original Routine wurden Timestamps für die Referrer erzeugt, die nur das Datum enthielten und alle waren gleich. Mit dem neuen Tag und der neuen Routine hat sich das nun erledigt.

Momentan kann ich noch nicht so richtig nachvollziehen, warum ihr meint das Rechenoperation mit strtotime() zu problemen führen sollen. Wenn ich den Bugreport lese betrifft das wirklich nur den parameter "now" als Datumsformat, der geändert wurde. Alles andere soll laufen wie sonst auch. Auch mein kleines Testscript aktualisiert artig. Dieses werde ich mal noch ausbauen und ein paar Berechnungen einbauen um zu sehen, ob das auch klappt. Bislang kann ich jedenfalls keine Fehler entdecken.

Im laufe des Tages mach ich dann einen Compare der Scripte und schreibe alle Änderungen auf, die ich wegen PHP5 gemacht habe. Das dient dann als inoffizielle Anleitung für all diejenigen, die das gleiche Problem haben mit der Bitte weitere Bugs bedingt durch PHP5 zu reporten.

Bislang halten sich die nötigen Modifikationen im Rahmen.
1) Austausch der "now" durch date('r')
2) gametime()
3) fehlende ' ' Zeichen in den Add Ons.

...bis später


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 14 Aug, 2004 08:45 
Offline
Eingeweihter
Eingeweihter

Registriert: Do 12 Aug, 2004 13:02
Beiträge: 91
Noch eine Code Frage.
Im about.php ist auch ein "now drin, aber etwas anders ...

[php]
$time = (strtotime(date("1971-m-d H:i:s",strtotime("nowt -".getsetting("gameoffsetseconds",0)." seconds"))))*getsetting("daysperday",4) % strtotime("1971-01-01 00:00:00");
[/php]

ich behelfe mir derzeit wie folg:

[php]
$jetzt = date('r');
$time = (strtotime(date("1971-m-d H:i:s",strtotime("$jetzt -".getsetting("gameoffsetseconds",0)." seconds"))))*getsetting("daysperday",4) % strtotime("1971-01-01 00:00:00");
[/php]

kann ich statt dessen folgendes schreiben?

[php]
$time = (strtotime(date("1971-m-d H:i:s",strtotime(date('r') -.getsetting("gameoffsetseconds",0)." seconds"))))*getsetting("daysperday",4) % strtotime("1971-01-01 00:00:00");
[/php]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 14 Aug, 2004 09:23 
Offline
Eingeweihter
Eingeweihter

Registriert: Do 12 Aug, 2004 13:02
Beiträge: 91
Ich hab die Rechenfunktionen mal ausprobiert und ich meine, das es gut aussieht.

Mein Testscript: http://www.dragon-clan.de/logd/test.php

der Code
[php]
<?

$time = (strtotime(date("r")));
echo("Time Date r = $time <br><br>");

$tomorrow = strtotime(date("Y-m-d H:i:s",$time)." + 1 day");
echo("Tag plus 1 = $tomorrow <br><br>");

$tomorrow = strtotime(date("Y-m-d 00:00:00",$tomorrow));
echo("tomorrow = $tomorrow<br>");

$today = strtotime(date("Y-m-d 00:00:00",$time));
echo("today = $today<br>");

// fest 6 runden pro tag da keine db abfrqage nach Spielrunden pro Tag
$dayduration = (($tomorrow-$today) / 6);
echo("dayduration = $dayduration<br>");

$secstotomorrow = $tomorrow - $time;
echo("secstotomorrow = $secstotomorrow<br>");

$secssofartoday = $time - $today;
echo("secssofartoday = $secssofartoday<br>");

$realsecstotomorrow = $secstotomorrow / 6;
echo("realsecstotomorrow = $realsecstotomorrow<br>");

$realsecssofartoday = $secssofartoday / 6;
echo("realsecssofartoday = $realsecssofartoday<br>");

?>
[/php]

alles dreht sich, alles bewegt sich und keine negativen Werte. Wenn es ein Problem geben würde mit Rechenoperationen bei strtotime müsste das ja bei $today auftreten. Scheint aber zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 14 Aug, 2004 11:07 
Offline
Admin
Admin
Benutzeravatar

Registriert: Di 21 Jan, 2003 01:11
Beiträge: 1604
Wohnort: Haßfurt
Geschlecht: Männlich
LoGD: http://www.anpera.net/logd
Skype: anpera-net
Zu deinem Testscript:
Nein, hier können keine Probleme auftauchen, da keine Rechenoperationen im betroffenen Bereich, nämlich mit Stunden, Minuten, oder Sekunden, durchgeführt werden. Operationen mit Tagen, Monaten und Jahren werden problemlos berechnet. "now" liefert ja in PHP 5 richtige Datumsinformationen, aber als Zeitinformation wird 00:00:00 zurückgegeben. Das wirkt sich auch auf strtotime() mit Operationen im Stunden-, Minuten- und Sekundenbereich aus ... und ist wohl der Grund, weshalb die neue Berechnungsfunktion mit PHP 5 nicht funktionert.

about.php, configuration.php:
Statt

$time = (strtotime(date("1971-m-d H:i:s",strtotime("nowt -".getsetting("gameoffsetseconds",0)." seconds"))))*getsetting("daysperday",4) % strtotime("1971-01-01 00:00:00");

kannst du

$time = (strtotime(date("1971-m-d H:i:s",strtotime(date("r")."-".getsetting("gameoffsetseconds",0)." seconds"))))*getsetting("daysperday",4) % strtotime("1971-01-01 00:00:00");

schreiben.

Problem mit strtotime:
strtotime("+ 1 hour") wird als strtotime("now + 1 hour") interpretiert. Da "now" aber nicht die richtigen Zeitinformationen enthält, wird der Ergebnis-Timestamp kleiner sein, als unter PHP 4 zu erwarten wäre.

Wenn ich das richtig verstanden habe, müsste folgende Berechnungsformel unter PHP 5 laufen. Würdest du bitte nochmal..?

[php]
function convertgametime($intime){
$multi = getsetting("daysperday",4);
$offset = getsetting("gameoffsetseconds",0);
$fixtime = mktime(0,0,0-$offset,date("m")-$multi,date("d"),date("Y"));
$time=$multi*(strtotime(date("Y-m-d H:i:s",$intime))-$fixtime);
$time=strtotime(date("Y-m-d H:i:s",$time)."+".($multi*date("I",$intime))." hour");
$time=strtotime(date("Y-m-d H:i:s",$time)."-".date("I",$time). " hour");
$time=strtotime(date("Y-m-d H:i:s",$time)."+".(23-$multi)." hour");
return $time;
}[/php]
Wie du siehst, wurde nur die Art der Startwertübergabe für die Rechenoperation innerhalb strtotime geändert. Für PHP 4 macht das keinen Unterschied... Läuft die Zeit jetzt auch unter PHP 5? Wenn nicht, ist strtotime() für Zeitberechnungen mit "+ xy minute" etc. unter PHP 5 definitiv unbrauchbar geworden. "now" kommt in dieser Funktion nämlich nicht vor.

Eine Alternative, die garantiert funktionert, wäre dann:
[php]
function convertgametime($intime){
$multi = getsetting("daysperday",4);
$offset = getsetting("gameoffsetseconds",0);
$fixtime = mktime(0,0,0-$offset,date("m")-$multi,date("d"),date("Y"));
$time=$multi*(strtotime(date("Y-m-d H:i:s",$intime))-$fixtime);
$time=mktime((date("H",$time)+($multi*date("I",$intime))-date("I",$intime)+(23-$multi)),date("i",$time),date("s",$time),date("m",$time),date("d",$time),date("Y",$time));
return $time;
}[/php]
Ich denke, ich werde das wohl so ins nächste Pakt einbauen, wenn du die PHP 5 Kompatibilität bestätigst :)

_________________
Praxis ist, wenn alles klappt aber keiner weiß warum. Theorie ist, wenn man weiß wie es geht, aber nichts klappt. Wir haben beides erfolgreich vereinigt: Bei uns klappt nichts und keiner weiß warum!

Neues Video: Marios freier Tag in Second Life


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 14 Aug, 2004 11:31 
Offline
Eingeweihter
Eingeweihter

Registriert: Do 12 Aug, 2004 13:02
Beiträge: 91
Beide convertgametime Funktionen laufen unter PHP5. Ich habe die erste jetzt eingebaut.

Die Änderungen für about und configuration habe ich auch übernommen. Jetzt ist mir auch klar, wo da das Problem lag.

Der Tag ist gerettet, wenn nicht noch was auftaucht. Ich mach mich dann mal an die Anleitung, denn so sieht das schon ganz gut aus.

/edit: sogar die Waschraumfee geht wieder :) Der Segen war weg

:top:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum