Navigation
 Startseite
 Fachbücher
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

DateTime diff Result +30 Tage -1 Stunde

Sie befinden sich: Home > Forum > Php > DateTime diff...

Wenn Sie einen Beitrag in diesem Forum schreiben möchten, so ist es erforderlich, dass Sie ein
 Benutzerkonto registrieren.

In diesen Beitrag wurden 3 Nachrichten geschrieben.

DateTime diff Result +30 Tage -1 Stunde
Nachricht wurde verfasst am 02.10.2025 um 17:00 Uhr von   Somgrab
Ich kann mit dem Ergebnis leben; aber wundere mich, ob ich einen blöden Fehler mache, der leicht ausgebessert werden könnte: Ich habe zwei Daten und lasse mir die Differenz berechnen:
$date1 = new DateTime('2025-11-01T10:29');
$date2 = new DateTime('2025-10-02T10:30');
$diff = $date2->diff($date1);
print_r($diff);


Als Ergebnis kommen 30 Tage und -1 Stunde heraus (+59 Minuten); warum nicht einfach 29 Tage, 23 Stunden und 59 Minuten?
Im Feld [days] wäre die 29 schon richtig.
DateInterval Object
(
[y] => 0
[m] => 0
[d] => 30
[h] => -1
[i] => 59
[s] => 0
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 0
[days] => 29
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)


Falls sich zufällig schon jemand damit herumgeschlagen hat und eine Lösung weiß, würde ich sie gerne hören.
Ansonsten belasse ich das Verhalten im Kuriositätenkabinett.
 
Nachricht wurde verfasst am 03.10.2025 um 07:29 Uhr von   Somgrab
Mir ist noch eingefallen, woher das vermutlich kommt: während der Zeitspanne ist die Zeitumstellung auf Normalzeit. Ist für mich aber kein Grund, für so eine komische Rückmeldung.
Nachricht wurde verfasst am 11.10.2025 um 08:48 Uhr von Schubertmedia Schubertmedia
Hey Somgrab,

guter Fund – das ist tatsächlich kein blöder Fehler, sondern ein Klassiker.

Der Grund ist wirklich die Zeitumstellung.
Zwischen dem 2. Oktober und dem 1. November liegt die Umstellung von Sommer- auf Winterzeit.
In diesem Zeitraum wird die Uhr um eine Stunde zurückgestellt.

PHP rechnet bei DateTime::diff() streng nach Uhrzeiten, nicht nach "gefühlter" Zeitspanne.

Das heißt: Es sieht den Zeitraum so, wie er im Kalender steht – inklusive der Stunde, die durch die Umstellung doppelt vorkommt.

Darum bekommst du:

30 Tage laut Kalender,

aber -1 Stunde, weil die Differenz zwischen 10:30 und 10:29 durch die Zeitumstellung eine Stunde weniger ist.

Wenn du das umgehen willst, kannst du beide Zeiten in UTC umrechnen.
Dann ignoriert PHP die Sommerzeit komplett:


<?php
$date1 = new DateTime('2025-11-01T10:29', new DateTimeZone('UTC'));
$date2 = new DateTime('2025-10-02T10:30', new DateTimeZone('UTC'));
$diff = $date2->diff($date1);
print_r($diff);
?>


Dann bekommst du das, was du erwartest - also 29 Tage, 23 Stunden, 59 Minuten.

Oder du benutzt DateTimeImmutable mit einer festen Zeitzone ohne DST (z. B. 'Etc/GMT').

Viele Grüße
Nico
   Antwort schreiben



Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.