Start · Sprachen · PHP · Referenz · gmstrftime

gmstrftime

Funktion

Formatiert einen Unix-Timestamp als Datums-/Zeitstring im GMT/UTC-Kontext entsprechend den lokalen Locale-Einstellungen.

seit PHP 4.0.0 Kategorie: date

Signatur

gmstrftime(string $format, ?int $timestamp = null): string|false

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

Typ
string|false
Beschreibung
Gibt den formatierten Datums-/Zeitstring zurück. Bei einem Fehler (z. B. ungültiger Format-String auf bestimmten Plattformen) wird 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
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;
Lokal (Berlin): 2025-06-21 12:00:00 UTC: 2025-06-21 10:00:00

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';
2025-05-14 10:23:45 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.