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
