Einfluss von date_default_timezone_set auf Zeit-Berechnungen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
mad-manne
Ehemaliger
Beiträge: 5393
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

Einfluss von date_default_timezone_set auf Zeit-Berechnungen

Beitragvon mad-manne » 04.03.2017 20:51

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.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert

Benutzeravatar
canonknipser
Supporter
Supporter
Beiträge: 947
Registriert: 10.09.2011 11:14
Kontaktdaten:

Re: Einfluss von date_default_timezone_set auf Zeit-Berechnungen

Beitragvon canonknipser » 04.03.2017 21:36

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 ...
Grüße, canonknipser
"there are only 10 types of people: those, who understand binary and those, who don't"
just arrived ;)
Kein Support via PN, nur im Board und (manchmal) im IRC

Benutzeravatar
mad-manne
Ehemaliger
Beiträge: 5393
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

Re: Einfluss von date_default_timezone_set auf Zeit-Berechnungen

Beitragvon mad-manne » 04.03.2017 21:53

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.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert

Benutzeravatar
gn#36
Administrator
Administrator
Beiträge: 9155
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Einfluss von date_default_timezone_set auf Zeit-Berechnungen

Beitragvon gn#36 » 04.03.2017 22:32

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.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.

PhilippK
Vorstand
Vorstand
Beiträge: 14619
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Re: Einfluss von date_default_timezone_set auf Zeit-Berechnungen

Beitragvon PhilippK » 04.03.2017 22:47

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
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods


Zurück zu „Coding & Technik“