Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 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
 
 
 

Formatieren des Datum und/oder Uhrzeit

Sie befinden sich: Home > Php Tutorial > Formatieren des Datum und/o...

Formatieren des Datum und/oder Uhrzeit


Eintrag am:  10.01.2023
Hits / Besucher:  2955
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials...
Tutorial Art:  eigenes
Eingetragen von   martin12398 martin12398
 
Beschreibung

In PHP gibt es verschiedene Wege, ein Datum oder eine Uhrzeit formatiert auszugeben. Die Funktion date() ist der einfachste Weg für schnelle Ausgaben. Für Berechnungen, Zeitzonen und komplexere Szenarien bietet PHP die DateTime-Klasse. Dieses Tutorial zeigt beide Ansätze und hilft bei der Entscheidung, welcher für den jeweiligen Anwendungsfall der richtige ist.

Die date()-Funktion: Schnelle Datumsausgabe

Die Funktion date() formatiert einen Unix-Timestamp als lesbaren String. Wird kein Timestamp angegeben, verwendet sie automatisch die aktuelle Zeit:

<?php

/* Aktuelles Datum */
echo date('d.m.Y'); // z.B. 28.02.2026
echo date('H:i:s'); // z.B. 14:30:45
echo date('d.m.Y H:i'); // z.B. 28.02.2026 14:30

/* Bestimmter Timestamp */
echo date('d.m.Y', 1609459200); // 01.01.2021
?>

Der erste Parameter ist der Formatstring. Jeder Buchstabe im String hat eine besondere Bedeutung und wird durch den entsprechenden Datumswert ersetzt.

Format-Zeichen im Überblick

Die folgende Tabelle zeigt die wichtigsten Format-Zeichen, gruppiert nach Kategorie:

Tag

ZeichenBeschreibungBeispiel
dTag mit führender Null01 bis 31
jTag ohne führende Null1 bis 31
DWochentag, 3 Buchstaben (englisch)Mon, Tue, Wed
lWochentag ausgeschrieben (englisch)Monday, Tuesday
NWochentag als Zahl (1=Mo, 7=So)1 bis 7

Monat

ZeichenBeschreibungBeispiel
mMonat mit führender Null01 bis 12
nMonat ohne führende Null1 bis 12
FMonatsname ausgeschrieben (englisch)January, February
MMonatsname, 3 Buchstaben (englisch)Jan, Feb
tAnzahl Tage im Monat28 bis 31

Jahr

ZeichenBeschreibungBeispiel
YVierstellige Jahreszahl2026
yZweistellige Jahreszahl26
LSchaltjahr (0 oder 1)0

Uhrzeit

ZeichenBeschreibungBeispiel
HStunde, 24h mit führender Null00 bis 23
GStunde, 24h ohne führende Null0 bis 23
iMinute mit führender Null00 bis 59
sSekunde mit führender Null00 bis 59
UUnix-Timestamp1709132400

Alle anderen Zeichen im Formatstring werden unverändert ausgegeben. Der Punkt in d.m.Y erscheint also als Punkt zwischen Tag, Monat und Jahr.

Die Zeichen lassen sich beliebig kombinieren. Häufig verwendete Formate sind zum Beispiel:

<?php

/* Deutsches Format */
echo date('d.m.Y'); // 28.02.2026

/* ISO 8601 (für Datenbanken) */
echo date('Y-m-d'); // 2026-02-28

/* Komplett mit Uhrzeit */
echo date('d.m.Y H:i:s'); // 28.02.2026 14:30:45

/* Nur Uhrzeit */
echo date('H:i'); // 14:30

/* Wochentag und Datum (englisch) */
echo date('l, d F Y'); // Saturday, 28 February 2026

/* MySQL-kompatibel */
echo date('Y-m-d H:i:s'); // 2026-02-28 14:30:45
?>

Für deutsche Wochentage und Monatsnamen benötigt man den IntlDateFormatter, der weiter unten im Tutorial vorgestellt wird.

Die DateTime-Klasse: Flexibel und leistungsstark

Für alles über die reine Formatierung hinaus bietet PHP die DateTime-Klasse. Sie ermöglicht Berechnungen, Vergleiche und Zeitzonenkonvertierungen:

<?php

/* DateTime-Objekt erstellen */
$jetzt = new DateTime();
echo $jetzt->format('d.m.Y H:i:s');

/* Aus einem String erstellen */
$datum = new DateTime('2026-03-15 10:30:00');
echo $datum->format('d.m.Y'); // 15.03.2026

/* Prozedurale Alternative */
$datum = date_create('2026-03-15');
echo date_format($datum, 'd.m.Y');
?>

Die format()-Methode verwendet die gleichen Format-Zeichen wie die date()-Funktion. Der Vorteil: Das DateTime-Objekt kann danach weiter bearbeitet werden.

date() vs. DateTime: Wann was verwenden?

Beide Ansätze haben ihre Berechtigung. Die folgende Übersicht hilft bei der Entscheidung:

Kriteriumdate()DateTime
Einfache AusgabeIdeal, ein Funktionsaufruf genügtMöglich, aber Overhead durch Objekterstellung
BerechnungenUmständlich mit strtotime()Elegant mit modify() oder DateInterval
ZeitzonenNur global über date_default_timezone_set()Pro Objekt individuell setzbar
EmpfehlungFür schnelle, einfache AusgabenFür neuen Code: Immer bevorzugen

In modernem PHP-Code sollte man grundsätzlich DateTime oder noch besser DateTimeImmutable verwenden. Die date()-Funktion ist für einfache Einzeiler weiterhin praktisch.

DateTimeImmutable: Die sichere Alternative

DateTimeImmutable funktioniert genau wie DateTime, mit einem wichtigen Unterschied: Methoden wie modify() verändern nicht das bestehende Objekt, sondern geben ein neues zurück. Das verhindert subtile Bugs:

<?php

/* DateTime: Original wird verändert! */
$start = new DateTime('2026-03-01');
$ende = $start->modify('+7 days');
echo $start->format('d.m.Y'); // 08.03.2026 (!)
echo $ende->format('d.m.Y'); // 08.03.2026
/* Beide zeigen das gleiche Datum! */

/* DateTimeImmutable: Original bleibt */
$start = new DateTimeImmutable('2026-03-01');
$ende = $start->modify('+7 days');
echo $start->format('d.m.Y'); // 01.03.2026
echo $ende->format('d.m.Y'); // 08.03.2026
?>

In neuem Code ist DateTimeImmutable die empfohlene Wahl, weil es unbeabsichtigte Änderungen ausschließt.

Datumsarithmetik: Tage, Monate und Jahre rechnen

Mit der modify()-Methode oder DateInterval lassen sich Datumswerte flexibel berechnen:

<?php

$heute = new DateTimeImmutable();

/* Tage addieren und subtrahieren */
$morgen = $heute->modify('+1 day');
$gestern = $heute->modify('-1 day');
$naechste_woche = $heute->modify('+7 days');
$in_30_tagen = $heute->modify('+30 days');

/* Mit DateInterval */
$interval = new DateInterval('P3M'); // 3 Monate
$in_3_monaten = $heute->add($interval);

/* Letzten Montag berechnen */
$letzter_mo = $heute->modify('last Monday');
echo $letzter_mo->format('d.m.Y');
?>

Alter berechnen

Die Methode diff() berechnet die Differenz zwischen zwei Datumsobjekten. Damit lässt sich zum Beispiel das Alter einer Person ermitteln:

<?php

$geburtsdatum = new DateTimeImmutable('1990-05-15');
$heute = new DateTimeImmutable();

$differenz = $heute->diff($geburtsdatum);
echo 'Alter: ' . $differenz->y . ' Jahre';
echo $differenz->format('%y Jahre, %m Monate');
?>

Das DateInterval-Objekt aus diff() enthält die Eigenschaften y (Jahre), m (Monate), d (Tage), h (Stunden), i (Minuten) und s (Sekunden). Die Eigenschaft days gibt die Gesamtzahl der Tage als absolute Zahl zurück, was besonders für Countdown-Berechnungen nützlich ist.

Datumsbereiche mit DatePeriod

Mit DatePeriod kann man über einen Zeitraum iterieren, zum Beispiel um alle Tage zwischen zwei Daten aufzulisten:

<?php

$start = new DateTimeImmutable('2026-03-01');
$ende = new DateTimeImmutable('2026-03-08');
$schritt = new DateInterval('P1D'); // 1 Tag

$zeitraum = new DatePeriod($start, $schritt, $ende);

foreach ($zeitraum as $tag) {
echo $tag->format('d.m.Y (D)') . PHP_EOL;
}
/* 01.03.2026 (Sun)
02.03.2026 (Mon)
...
07.03.2026 (Sat) */
?>

DatePeriod ist ideal für Kalenderansichten, Berichtszeilen oder Schichtpläne, bei denen man jeden einzelnen Tag eines Zeitraums verarbeiten muss.

Zeitzonen richtig handhaben

PHP arbeitet standardmäßig mit der Zeitzone, die in der php.ini unter date.timezone eingestellt ist. Auf Shared-Hosting-Servern ist das oft UTC oder Europe/Berlin. Wer eine Anwendung für Nutzer in verschiedenen Zeitzonen entwickelt, muss die Zeitzone im Code explizit setzen, damit Datumsangaben korrekt angezeigt werden. Die Funktion date_default_timezone_set() setzt die Zeitzone global für alle folgenden Datumsoperationen. Besser ist es jedoch, die Zeitzone pro DateTime-Objekt über den Konstruktor oder setTimezone() zu setzen, um unbeabsichtigte Seiteneffekte in anderen Teilen der Anwendung zu vermeiden.

Zeitzonen sind einer der häufigsten Stolpersteine bei der Arbeit mit Datumswerten. PHP bietet dafür die Klasse DateTimeZone:

<?php

/* Standard-Zeitzone setzen */
date_default_timezone_set('Europe/Berlin');

/* Zeitzone pro Objekt festlegen */
$berlin = new DateTimeImmutable(
'now',
new DateTimeZone('Europe/Berlin')
);
$tokyo = new DateTimeImmutable(
'now',
new DateTimeZone('Asia/Tokyo')
);

echo 'Berlin: ' . $berlin->format('H:i');
echo 'Tokyo: ' . $tokyo->format('H:i');

/* Zeitzone eines Objekts ändern */
$utc = $berlin->setTimezone(
new DateTimeZone('UTC')
);
echo 'UTC: ' . $utc->format('H:i');
?>

Als Best Practice sollte man Datumswerte intern immer in UTC speichern und erst bei der Ausgabe in die lokale Zeitzone umrechnen. So vermeidet man Probleme bei der Sommerzeit-Umstellung.

Unix-Timestamps verstehen

Ein Unix-Timestamp ist die Anzahl der Sekunden seit dem 1. Januar 1970 (UTC). Viele PHP-Funktionen arbeiten intern mit Timestamps:

<?php

/* Aktueller Timestamp */
echo time(); // z.B. 1772236800

/* Timestamp aus einem String */
echo strtotime('2026-03-15'); // 1773795200
echo strtotime('+7 days'); // in 7 Tagen
echo strtotime('next Monday'); // nächster Montag

/* Timestamp in lesbares Datum */
echo date('d.m.Y', 1609459200); // 01.01.2021

/* DateTime aus Timestamp */
$dt = new DateTimeImmutable();
$dt = $dt->setTimestamp(1609459200);
echo $dt->format('d.m.Y'); // 01.01.2021
?>

strtotime() ist besonders praktisch für relative Zeitangaben. Die Funktion versteht englische Ausdrücke wie next Monday, +3 months oder last day of December 2026.

Lokalisierte Datumsausgabe

Die Funktionen date() und DateTime::format() geben Wochentage und Monatsnamen immer auf Englisch aus. Für deutschsprachige Projekte ist das oft nicht ausreichend. Seit PHP 8.1 steht die Klasse IntlDateFormatter zur Verfügung, die Datumsangaben in jeder beliebigen Sprache formatieren kann. Sie basiert auf der ICU-Bibliothek und berücksichtigt automatisch länderspezifische Konventionen wie die Reihenfolge von Tag, Monat und Jahr.

Die Funktionen date() und DateTime::format() geben Wochentage und Monate nur auf Englisch aus. Für deutsche Ausgaben gibt es den IntlDateFormatter:

<?php

$datum = new DateTimeImmutable('2026-03-15');

$formatter = new IntlDateFormatter(
'de_DE',
IntlDateFormatter::FULL,
IntlDateFormatter::NONE
);
echo $formatter->format($datum);
// Sonntag, 15. März 2026

/* Eigenes Format */
$formatter = new IntlDateFormatter(
'de_DE',
IntlDateFormatter::NONE,
IntlDateFormatter::NONE,
null,
null,
'EEEE, d. MMMM yyyy'
);
echo $formatter->format($datum);
// Sonntag, 15. März 2026
?>

Der IntlDateFormatter benötigt die PHP-Erweiterung intl, die auf den meisten Servern verfügbar ist. Für einfache Fälle kann man auch ein eigenes Array mit deutschen Monatsnamen verwenden.

Praxisbeispiel: Ablaufdatum und Countdown

Ein häufiges Szenario: Man möchte berechnen, wie viele Tage bis zu einem bestimmten Datum verbleiben, etwa für ein Ablaufdatum oder einen Event-Countdown:

<?php

$heute = new DateTimeImmutable();
$event = new DateTimeImmutable('2026-12-24');

$diff = $heute->diff($event);

if ($diff->invert === 0) {
echo 'Noch ' . $diff->days . ' Tage bis Weihnachten.';
} else {
echo 'Weihnachten war vor ' . $diff->days . ' Tagen.';
}

/* Ablaufdatum berechnen */
$registrierung = new DateTimeImmutable();
$ablauf = $registrierung->modify('+30 days');

echo 'Account gültig bis: ';
echo $ablauf->format('d.m.Y');

$rest = $heute->diff($ablauf);
if ($rest->days <= 7 && $rest->invert === 0) {
echo 'Achtung: Nur noch ' . $rest->days . ' Tage!';
}
?>

Verwandte Tutorials

Weitere Tutorials rund um Datum und Zeit in PHP:

Häufige Fragen zur Datumsformatierung

Die folgenden Fragen tauchen bei der Arbeit mit Datums- und Zeitfunktionen in PHP besonders häufig auf. Sie decken typische Stolperfallen ab und helfen, gängige Fehler zu vermeiden.

Die wichtigsten Fragen im Überblick:

Wie gebe ich das aktuelle Datum auf Deutsch aus?

Die Funktion date() gibt Wochentage und Monate nur auf Englisch aus. Für deutsche Ausgaben verwendet man den IntlDateFormatter mit dem Locale de_DE. Ein Beispiel dafür findet sich im Abschnitt zur lokalisierten Datumsausgabe weiter oben.

Was ist der Unterschied zwischen DateTime und DateTimeImmutable?

DateTime verändert das bestehende Objekt bei Methoden wie modify(). DateTimeImmutable gibt stattdessen ein neues Objekt zurück und lässt das Original unverändert. Für neuen Code ist DateTimeImmutable die sicherere Wahl.

Wie speichere ich Datumswerte in einer Datenbank?

Am besten als DATETIME- oder TIMESTAMP-Spalte in UTC. Beim Speichern: $datum->format('Y-m-d H:i:s'). Beim Lesen: new DateTimeImmutable($row['datum']). Die Umrechnung in die lokale Zeitzone erfolgt erst bei der Ausgabe.

Warum zeigt date() die falsche Uhrzeit an?

Vermutlich ist die falsche Zeitzone eingestellt. Mit date_default_timezone_set('Europe/Berlin') am Anfang des Scripts oder über die php.ini-Einstellung date.timezone lässt sich das korrigieren.

 

Tags:

 

Kommentare (0)

Noch keine Kommentare. Sei der Erste!

Melde dich an, um einen Kommentar zu 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.