Start · Sprachen · PHP · Referenz · gmdate

gmdate

Funktion

Formatiert einen Unix-Zeitstempel als Datum/Uhrzeit-Zeichenkette in der Zeitzone <code>UTC/GMT</code> (ohne lokale Zeitzonenverschiebung).

seit PHP 4.0.0 Kategorie: date

Signatur

gmdate(string $format, ?int $timestamp = null): string

Beschreibung

gmdate() funktioniert identisch zur Funktion date(), ignoriert jedoch die serverseitig eingestellte Zeitzone vollständig und gibt das Datum/die Uhrzeit immer in UTC (Coordinated Universal Time) aus. Dies ist besonders nützlich, wenn Zeitangaben zeitzonenneutral gespeichert oder übertragen werden sollen – z. B. für HTTP-Header, Datenbank-Zeitstempel oder API-Schnittstellen.

Wird der Parameter timestamp weggelassen oder auf null gesetzt, verwendet die Funktion den aktuellen Unix-Zeitstempel (time()). Der Formatstring akzeptiert dieselben Platzhalter wie bei date(), also z. B. Y für das vierstellige Jahr, m für den Monat, d für den Tag, H für die Stunde im 24-Stunden-Format usw.

Ein typischer Anwendungsfall ist die Erzeugung von RFC-konformen Datumsstrings (z. B. für Last-Modified- oder Expires-HTTP-Header), da diese stets in GMT angegeben werden müssen. Auch beim Vergleich oder der Vereinheitlichung von Zeiten aus verschiedenen Zeitzonen empfiehlt sich die Arbeit auf UTC-Basis.

Im Gegensatz zu date() beeinflusst die Einstellung date.timezone in der php.ini oder ein Aufruf von date_default_timezone_set() das Ergebnis von gmdate() nicht.

Parameter

Name Typ Default Beschreibung
$format Pflicht string Formatstring mit denselben Platzhaltern wie bei date(), z. B. 'Y-m-d H:i:s' oder 'D, d M Y H:i:s \G\M\T'.
$timestamp ?int null Unix-Zeitstempel als Integer. Wird null übergeben oder der Parameter weggelassen, wird der aktuelle Zeitpunkt (time()) verwendet.

Rückgabewert

Typ
string
Beschreibung
Gibt einen formatierten Datums-/Uhrzeit-String in UTC zurück. Im Gegensatz zu date() gibt gmdate() niemals false zurück.

Beispiele

Aktuelles UTC-Datum und -Uhrzeit ausgeben

<?php
// Lokale Zeitzone ist z. B. Europe/Berlin (UTC+2 im Sommer)
date_default_timezone_set('Europe/Berlin');

$local = date('Y-m-d H:i:s');      // Lokale Zeit (MESZ)
$utc   = gmdate('Y-m-d H:i:s');   // UTC-Zeit

echo 'Lokale Zeit: ' . $local . PHP_EOL;
echo 'UTC-Zeit:    ' . $utc   . PHP_EOL;
Lokale Zeit: 2024-06-15 14:00:00 UTC-Zeit: 2024-06-15 12:00:00

HTTP-Header mit RFC-konformem GMT-Datum erzeugen

<?php
// Einen gültigen HTTP-Expires-Header setzen (Format nach RFC 7231)
$expires = gmdate('D, d M Y H:i:s \G\M\T', time() + 3600);
header('Expires: ' . $expires);

echo 'Expires-Header: ' . $expires;
Expires-Header: Sat, 15 Jun 2024 13:00:00 GMT

Bestimmten Zeitstempel als UTC-Datum formatieren

<?php
// Unix-Zeitstempel für den 1. Januar 2000, 00:00:00 UTC
$timestamp = mktime(0, 0, 0, 1, 1, 2000);

echo gmdate('d.m.Y H:i:s', $timestamp) . PHP_EOL;
// Ausgabe ist unabhängig von der Serverzeitzone immer:
// 01.01.2000 00:00:00
01.01.2000 00:00:00

// Wichtig · Fallstricke

Zeitzonenfalle: Wenn date() und gmdate() gemischt verwendet werden, kann es zu Verwirrungen kommen. Es empfiehlt sich, intern konsequent mit UTC zu arbeiten und die Zeitzonenkonvertierung erst bei der Ausgabe vorzunehmen – z. B. mit der Klasse DateTimeImmutable und DateTimeZone.

Für komplexere Zeitberechnungen (Addition von Intervallen, Zeitzonen-Konvertierung, Sommerzeit-Behandlung) ist die objektorientierte API mit DateTimeImmutable und DateTimeZone deutlich robuster als gmdate().