Seite 1 von 1

Einfluss von date_default_timezone_set auf Zeit-Berechnungen

Verfasst: 04.03.2017 20:51
von mad-manne
Ahoi zusammen,
ich fange nach langer Programmier-Abstinenz gerade wieder an mit PHP zu coden und hab' da mal ne Fräge :geek:

Ich bekomme aus einem Formular (Validierung / Sanitizing findet statt!) Anfangs- und Endzeiten im Format HH:MM und will daraus die Dauer berechnen.
Zu Beginn hatte ich den Befehl date_default_timezone_set('UTC'); noch nicht genutzt und bekam dadurch immer falsche Ergebnisse.

So wie ich es aktuell mache, klappt es ... siehe hier der exemplarische Code

Code: Alles auswählen

date_default_timezone_set('UTC');

$ts_start = strtotime('1970-01-01' . $beginn);
$ts_ende  = strtotime('1970-01-01' . $ende);

if($ts_ende < $ts_start) {
    $ts_ende = $ts_ende + 86400;
}

$ts_dauer = $ts_ende - $ts_start;
$display_result = date('H:i', $ts_dauer);
Ich will jetzt nur sicher sein, dass durch das explizite Setzen der Timezone auf UTC nix mehr schiefgehen kann, oder ob die Zeitzoneneinstellungen des Servers, auf dem das Script ausgeführt wird doch noch einen Einfluss haben können??

Freue mich auf euer Feedback ... vielen Dank für Lesen,
Manne.

Re: Einfluss von date_default_timezone_set auf Zeit-Berechnungen

Verfasst: 04.03.2017 21:36
von canonknipser
Wenn es dir rein um die Dauer geht: die beiden Zeiten normal in Minuten umrechnen hh*60+mm, Differenz errechnen, wenn Negativ, Zeitwert für 24h dazu addieren, dann die Zeitdifferenz durch 60 dividieren mit Casten zum Integer (gibt die Stunden), anschließend die Zeitdifferenz mit Modulo 60 %-Operator, gibt die Minuten

Spart dir den Umweg über die Serverzeit und deren Einfluss ...

Re: Einfluss von date_default_timezone_set auf Zeit-Berechnungen

Verfasst: 04.03.2017 21:53
von mad-manne
canonknipser hat geschrieben:Spart dir den Umweg über die Serverzeit und deren Einfluss ...
Danke für den neuen Ansatz zur Lösung ...

Ich wollte aber nachdem ich heute wieder reichlich PHP-Doku zu den ganzen date/time-Funktionen gelesen habe, trotzdem auch gerne verstehen, ob denn meine jetzige Lösung noch "gestört" werden kann durch lokale Einflüsse oder ob ich eben durch das Setzen von UTC "fein raus" wäre.

Gruß,
Manne.

Re: Einfluss von date_default_timezone_set auf Zeit-Berechnungen

Verfasst: 04.03.2017 22:32
von gn#36
Ich habe das Gefühl beim Berechnen von Zeitpunkten und Dauer macht man irgendwie immer was falsch in Kombination mit Zeitzonen, egal ob man vorher auf UTC geht oder nicht.

Spätestens wenn einem die Zeitumstellung 2x im Jahr in die Quere kommt geht normalerweise was schief, denn das ist dann so ähnlich wie in zwei Zeitzonen, aber in vielen Fällen ist einem die Differenz von einer Stunde eigentlich egal.

Beispiel: Du willst einen Termin um einen Tag verlegen. An zwei Tagen im Jahr ist +24h falsch (zumindest überall dort wo es Zeitumstellungen gibt). Im Frühjahr ist es zu lang, im Herbst zu kurz. Mehrtägige Termine die über diese zwei Tage gehen haben wenn man nicht aufpasst ebenfalls ne falsche Dauer.

Für deinen Code jetzt macht das vermutlich keinen Unterschied, weil du alles auf ein Datum im Januar umrechnest, schön weit weg von Datumssprüngen.

Re: Einfluss von date_default_timezone_set auf Zeit-Berechnungen

Verfasst: 04.03.2017 22:47
von PhilippK
Ich würde mir auch mal http://php.net/manual/de/class.datetime.php anschauen. Da hat sich doch einiges getan und damit lässt sich das besser steuern.

Gruß, Philipp