Signatur
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
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;
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;
// 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.%efür Tag ohne führende Null). - Das Gebietsschema muss auf dem System installiert sein;
setlocale()gibtfalsezurü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.