mustang
Mitglied
echo $begrüßung;
ich habe mich in den letzten Tagen mal mit einem Problem beschäftigt, dass den timestamp im PHP angeht. Da ich in meiner Datenbank nur mit timestamps arbeite, ergab sich das Problem, dass Daten vor dem 01.01.1970 nicht funktionieren. Da man aber öfters auch Geburtstage der User abspeichern will und ich deswegen nicht meine Datenbank umstellen wollte, habe ich die Funktionen date() und mktime() neu bzw. umgeschrieben. Jetzt werden auch negative timestamps ausgegeben und auch wieder in ein Datum zurückgewandelt.
Ich möchte euch hier die Funktionen zeigen, damit ihr sie verwenden könnt, aber vor allem dafür, dass ihr sie testet und eure Meinung dazu abgebt.
Zur Erklärung:
die bestehenden Funktionen date() und mktime() müssen im script lediglich durch fdate() und fmktime() ersetzt werden und können genauso verwendet werden, wie auch schon vorher. Wobei die Unterstützung der gesamten date() Funktionen noch nicht fertig ist und lediglich die Ausgabe von Jahr, Monat, Tag, Stunde, Minute, Sekunde funktioniert.
Außerdem habe ich zur vollständigkeit auch die time() Funkion neu definiert. Sie kann aber auch so gelassen werden, wie sie ist.
Außerdem habe ich in die Funktionen die Umrechnung in Zeitzonen eingebaut. Hierfür müssen die Angaben in der Funktion ftimetoserver() und in ftimetozone() geändert werden im Format "Europe/Berlin" oder ähnliche. Die entsprechenden Zeitzonen lassen sich per fzeitzonen() ausgeben (auch nützlich für die Erstellung einer Auswahl für den Benutzer).
die Funktionen:
time_functions.php
echo $verabschiedung;
echo name;
ich habe mich in den letzten Tagen mal mit einem Problem beschäftigt, dass den timestamp im PHP angeht. Da ich in meiner Datenbank nur mit timestamps arbeite, ergab sich das Problem, dass Daten vor dem 01.01.1970 nicht funktionieren. Da man aber öfters auch Geburtstage der User abspeichern will und ich deswegen nicht meine Datenbank umstellen wollte, habe ich die Funktionen date() und mktime() neu bzw. umgeschrieben. Jetzt werden auch negative timestamps ausgegeben und auch wieder in ein Datum zurückgewandelt.
Ich möchte euch hier die Funktionen zeigen, damit ihr sie verwenden könnt, aber vor allem dafür, dass ihr sie testet und eure Meinung dazu abgebt.
Zur Erklärung:
die bestehenden Funktionen date() und mktime() müssen im script lediglich durch fdate() und fmktime() ersetzt werden und können genauso verwendet werden, wie auch schon vorher. Wobei die Unterstützung der gesamten date() Funktionen noch nicht fertig ist und lediglich die Ausgabe von Jahr, Monat, Tag, Stunde, Minute, Sekunde funktioniert.
Außerdem habe ich zur vollständigkeit auch die time() Funkion neu definiert. Sie kann aber auch so gelassen werden, wie sie ist.
Außerdem habe ich in die Funktionen die Umrechnung in Zeitzonen eingebaut. Hierfür müssen die Angaben in der Funktion ftimetoserver() und in ftimetozone() geändert werden im Format "Europe/Berlin" oder ähnliche. Die entsprechenden Zeitzonen lassen sich per fzeitzonen() ausgeben (auch nützlich für die Erstellung einer Auswahl für den Benutzer).
die Funktionen:
time_functions.php
PHP:
function ftime() {
return (time());
}
function fdate($format, $time) {
$time = ftimetozone($time);
if ($time >= 0) {$umrechnung = fsectoday($time);
$tage = $umrechnung["tage"];
$jd = (gregoriantojd(01, 01, 1970) + ($tage));
$greg = explode("/", jdtogregorian($jd));
$datum["tag"] = $greg[1];
$datum["monat"] = $greg[0];
$datum["jahr"] = $greg[2];$datum["stunden"] = $umrechnung["stunden"];
$datum["minuten"] = $umrechnung["minuten"];
$datum["sekunden"] = $umrechnung["sekunden"];} else {$umrechnung = fsectoday($time);
$tage = $umrechnung["tage"];if ($umrechnung["stunden"] != 0 || $umrechnung["minuten"] != 0 || $umrechnung["sekunden"] || 0) { $tage += 1; }
$jd = (gregoriantojd(01, 01, 1970) - ($tage));
$greg = explode("/", jdtogregorian($jd));
$datum["tag"] = $greg[1];
$datum["monat"] = $greg[0];
$datum["jahr"] = $greg[2];
$tagsekunden = (3600*24) - (($umrechnung["stunden"] * 3600) + ($umrechnung["minuten"] * 60) + ($umrechnung["sekunden"]));
$restgreg = fsectoday($tagsekunden);
$datum["stunden"] = $restgreg["stunden"];
$datum["minuten"] = $restgreg["minuten"];
$datum["sekunden"] = $restgreg["sekunden"];
}
$format = str_replace("d", str_pad($datum["tag"], 2, "0", STR_PAD_LEFT), $format);
$format = str_replace("m", str_pad($datum["monat"], 2, "0", STR_PAD_LEFT), $format);
$format = str_replace("Y", $datum["jahr"], $format);
$format = str_replace("y", substr($datum["jahr"], 2, 2), $format);
$format = str_replace("H", str_pad($datum["stunden"], 2, "0", STR_PAD_LEFT), $format);
$format = str_replace("i", str_pad($datum["minuten"], 2, "0", STR_PAD_LEFT), $format);
$format = str_replace("s", str_pad($datum["sekunden"], 2, "0", STR_PAD_LEFT), $format);
return $format;
}
function fmktime($stunden, $minuten, $sekunden, $monat, $tag, $jahr) {$time = strtotime("".$jahr."-".$monat."-".$tag." ".$stunden.":".$minuten.":".$sekunden."");
$time = ftimetoserver($time);
return $time;
}
function fsectoday($zeit) {
if ($zeit < 0) { $zeit *= -1; } //abs
$restsekunden = $zeit % (3600*24);
$tage = ($zeit - $restsekunden) / (3600*24);
$zeit = $restsekunden;
$restsekunden = $restsekunden % 3600;
$stunden = ($zeit - $restsekunden) / 3600;
$zeit = $restsekunden;
$restsekunden = $restsekunden % 60;
$minuten = ($zeit - $restsekunden) / 60;
$sekunden = $restsekunden;
return array("tage" => $tage, "stunden" => $stunden, "minuten" => $minuten, "sekunden" => $sekunden);}
function fdatumdiff($tag1, $monat1, $jahr1, $stunde1 = 0, $minute1 = 0, $sekunde1 = 0, $tag2, $monat2, $jahr2, $stunde2 = 0, $minute2 = 0, $sekunde2 = 0) {$tage1 = gregoriantojd($monat1, $tag1, $jahr1);
$tage2 = gregoriantojd($monat2, $tag2, $jahr2);
$sekunden1 = $tage1 * 3600*24;
$sekunden1 += $stunde1*60*60;
$sekunden1 += $minute1*60;
$sekunden1 += $sekunde1;
$sekunden2 = $tage2 * 3600*24;
$sekunden2 += $stunde2*60*60;
$sekunden2 += $minute2*60;
$sekunden2 += $sekunde2;
$diff = $sekunden2 - $sekunden1;
if ($diff < 0) $diff *= -1; // abs
return $diff;
}
function fzeitzonen() {
return DateTimeZone::listIdentifiers();
}
function ftimetoserver($time) {
//hier die Zeitzone des Serverstandortes angeben
$diff = utcdiff("Europe/Berlin");
$time += $diff;
return $time;
}
function ftimetozone($time) {
//hier die Zeitzone der Ausgabe, also zum Beispiel des Users angeben
$diff = utcdiff("Europe/Berlin");
$time += $diff;
return $time;
}
function utcdiff($timezone) {
$dateTimeZoneUser = new DateTimeZone($timezone);
$dateTimeUser = new DateTime("now", $dateTimeZoneUser);
$timeOffset = $dateTimeZoneUser->getOffset($dateTimeUser);
return $timeOffset;
}
echo $verabschiedung;
echo name;