Signatur
Beschreibung
gmstrftime() verhält sich identisch wie strftime(), mit dem entscheidenden Unterschied, dass der angegebene Timestamp stets als GMT/UTC-Zeit interpretiert wird – unabhängig von der Systemzeitzone des Servers. Dies ist besonders nützlich, wenn Zeiten für verschiedene Zeitzonen konsistent in UTC ausgegeben werden sollen, ohne die Servereinstellungen zu verändern.
Die Formatierung richtet sich nach den C-typischen Format-Platzhaltern (z. B. %Y für das vierstellige Jahr, %m für den Monat, %d für den Tag). Die Ausgabe der Wochentag- und Monatsnamen erfolgt entsprechend der aktiven Locale-Einstellung, die mit setlocale() gesteuert werden kann.
Falls kein $timestamp angegeben wird, verwendet die Funktion den aktuellen Zeitpunkt (time()). Im Gegensatz zu date() ist die Ausgabe damit locale-abhängig und eignet sich daher besonders für mehrsprachige Anwendungen, bei denen Monatsnamen oder Wochentage in der Landessprache des Nutzers angezeigt werden sollen.
Hinweis: Ab PHP 8.1.0 ist strftime() und damit auch gmstrftime() als veraltet (deprecated) markiert. Als Ersatz empfiehlt sich die Verwendung von IntlDateFormatter oder DateTimeImmutable::format() in Kombination mit einer UTC-Zeitzone.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $format Pflicht | string | Format-String mit %-Platzhaltern, z. B. %Y-%m-%d %H:%M:%S. Die verfügbaren Platzhalter entsprechen denen von strftime(). |
|
| $timestamp | ?int | null | Unix-Timestamp (Sekunden seit dem 1. Januar 1970 00:00:00 UTC). Wird null übergeben oder der Parameter weggelassen, wird der aktuelle Zeitpunkt (time()) verwendet. |
Rückgabewert
false zurückgegeben.Beispiele
Aktuelles Datum und Uhrzeit in UTC ausgeben
<?php
// Locale auf Deutsch setzen (Linux/macOS)
setlocale(LC_TIME, 'de_DE.UTF-8');
// Aktuellen Zeitpunkt in UTC formatieren
$utcString = gmstrftime('%A, %d. %B %Y – %H:%M:%S UTC');
echo $utcString;
// Beispielausgabe: Mittwoch, 14. Mai 2025 – 10:23:45 UTC
Timestamp in UTC vs. lokaler Zeit vergleichen
<?php
// Zeitzone des Servers auf Europe/Berlin setzen
date_default_timezone_set('Europe/Berlin');
$timestamp = mktime(12, 0, 0, 6, 21, 2025); // 21. Juni 2025, 12:00 Uhr Berliner Zeit
// Lokale Zeit (MESZ = UTC+2)
$lokal = strftime('%Y-%m-%d %H:%M:%S', $timestamp);
echo 'Lokal (Berlin): ' . $lokal . PHP_EOL;
// UTC-Zeit mit gmstrftime
$utc = gmstrftime('%Y-%m-%d %H:%M:%S', $timestamp);
echo 'UTC: ' . $utc . PHP_EOL;
Moderner Ersatz mit DateTimeImmutable (empfohlen ab PHP 8.1)
<?php
// Empfohlene Alternative zu gmstrftime() ab PHP 8.1
$dt = new DateTimeImmutable('now', new DateTimeZone('UTC'));
echo $dt->format('Y-m-d H:i:s') . ' UTC';
// Wichtig · Fallstricke
Deprecation ab PHP 8.1: gmstrftime() (sowie strftime()) sind seit PHP 8.1.0 als veraltet markiert und werden in einer zukünftigen PHP-Version entfernt. Es wird empfohlen, auf DateTimeImmutable mit DateTimeZone('UTC') oder auf IntlDateFormatter für locale-abhängige Ausgaben umzusteigen.
Plattformabhängigkeit: Die verfügbaren Format-Platzhalter und deren Verhalten können je nach Betriebssystem und installierten Locale-Paketen variieren. Insbesondere unter Windows sind nicht alle POSIX-Platzhalter verfügbar.
Locale-Konfiguration: Die Funktion gibt Monatsnamen und Wochentage in der Sprache der aktiven Locale aus. Diese muss auf dem System installiert sein und vorher mit setlocale() gesetzt werden. Ohne explizite Einstellung wird die Systemstandard-Locale verwendet.