Signatur
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
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;
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;
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
// 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().