Start · Sprachen · PHP · Referenz · strftime

strftime

Funktion

Formatiert einen Unix-Zeitstempel als Zeichenkette gemäß dem aktuell gesetzten Gebietsschema (<code>locale</code>).

seit PHP 4.0.0 Kategorie: date

Signatur

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

Beschreibung

strftime() wandelt einen Unix-Zeitstempel in eine formatierte Datumszeichenkette um. Im Unterschied zu date() berücksichtigt die Funktion das mit setlocale() gesetzte Gebietsschema – Monatsnamen, Wochentagsnamen und andere lokalisierte Elemente werden also in der jeweiligen Sprache ausgegeben.

Der erste Parameter $format enthält Formatierungssequenzen, die mit einem Prozentzeichen (%) beginnen. Beispiele: %A für den ausgeschriebenen Wochentag, %B für den ausgeschriebenen Monatsnamen, %d für den Tag mit führender Null, %Y für das vierstellige Jahr. Alle verfügbaren Sequenzen sind betriebssystem- und locale-abhängig.

Wird $timestamp weggelassen oder als null übergeben, wird der aktuelle Unix-Zeitstempel (time()) verwendet. Bei einem Fehler gibt die Funktion false zurück.

Achtung: strftime() ist seit PHP 8.1.0 als deprecated markiert und wird in zukünftigen PHP-Versionen entfernt. Als Nachfolger empfiehlt sich die Klasse IntlDateFormatter aus der intl-Extension oder date() in Kombination mit händisch übersetzten Zeichenketten.

Parameter

Name Typ Default Beschreibung
$format Pflicht string Formatzeichenkette mit %-Sequenzen, z. B. %d. %B %Y. Die unterstützten Sequenzen sind teils betriebssystemabhängig.
$timestamp int|null null Unix-Zeitstempel als Ganzzahl. Wird null übergeben, wird der aktuelle Zeitpunkt (time()) verwendet.

Rückgabewert

Typ
string|false
Beschreibung
Gibt die formatierte Datumszeichenkette zurück. Bei einem Fehler (z. B. ungültigem Format oder nicht gesetzter Locale) wird false zurückgegeben.

Beispiele

Aktuelles Datum auf Deutsch formatieren

<?php
setlocale(LC_TIME, 'de_DE.UTF-8');

$timestamp = mktime(0, 0, 0, 6, 15, 2023);

// Ausgeschriebener Wochentag, Tag, Monat und Jahr
$ausgabe = strftime('%A, %d. %B %Y', $timestamp);
echo $ausgabe;
Donnerstag, 15. Juni 2023

Vergleich mit date() und Locale-Abhängigkeit

<?php
// Ohne gesetztes Gebietsschema liefert strftime englische Namen
setlocale(LC_TIME, 'en_US.UTF-8');
$ts = mktime(0, 0, 0, 12, 24, 2023);
echo strftime('%A, %d. %B %Y', $ts) . PHP_EOL;

// Mit deutschem Gebietsschema
setlocale(LC_TIME, 'de_DE.UTF-8');
echo strftime('%A, %d. %B %Y', $ts) . PHP_EOL;

// Moderne Alternative mit IntlDateFormatter
$fmt = new IntlDateFormatter('de_DE', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Europe/Berlin');
echo $fmt->format($ts) . PHP_EOL;
Sunday, 24. December 2023 Sonntag, 24. Dezember 2023 Sonntag, 24. Dezember 2023

// Wichtig · Fallstricke

Deprecated seit PHP 8.1.0: strftime() und gmstrftime() gelten als veraltet und sollten in neuem Code nicht mehr verwendet werden. Die empfohlene Nachfolgelösung ist IntlDateFormatter (intl-Extension) für vollständige Lokalisierung oder date() mit manuellen Übersetzungstabellen.

  • Die verfügbaren %-Sequenzen unterscheiden sich je nach Betriebssystem und C-Laufzeitbibliothek – besonders unter Windows fehlen einige Sequenzen (z. B. %e für Tag ohne führende Null).
  • Das Gebietsschema muss auf dem System installiert sein; setlocale() gibt false zurück, wenn die Locale nicht gefunden wird.
  • In Multithreading-Umgebungen (z. B. PHP-FPM mit mehreren Threads) kann das Setzen von setlocale() zu Race-Conditions führen, da es einen globalen Zustand verändert.
  • Für Zeitstempel vor dem 1. Januar 1970 oder sehr weit in der Zukunft kann das Verhalten je nach Plattform variieren.