there is a strftime compatibility package for php>=8.1 at https://github.com/alphp/strftime
(PHP 4, PHP 5, PHP 7, PHP 8)
strftime — Formatiert eine Zeit-/Datumsangabe gemäß dem Gebietsschema
Diese Funktion wurde in PHP 8.1.0 als DEPRECATED (veraltet) markiert. Es wird dringend davon abgeraten, sich auf diese Funktion zu verlassen.
Alternativ können die folgenden Funktionen verwendet werden:
Formatiert eine Zeit-/Datumsangabe gemäß dem Gebietsschema. Monats- und Wochentagsnamen sowie andere sprachabhängige Zeichenketten werden entsprechend des per setlocale() eingestellten Wertes dargestellt.
Es ist durchaus möglich, dass die verwendete C-Bibliothek nicht alle
angegebenen Formatierungszeichen erkennt. In diesem Fall werden diese
Zeichen von der PHP-Funktion strftime() nicht
unterstützt. Außerdem unterstützen nicht alle Plattformen negative
Zeitstempel, weshalb der Wertebereich eines Datums durch den Beginn der
Unix-Epoche begrenzt sein könnte. Das bedeutet, dass z. B. %e, %T, %R und
%D (und vielleicht noch weitere) und Zeitangaben vor dem
Jan 1, 1970
auf Windows-Systemen, einigen
Linux-Distributionen und einigen anderen Betriebssytemen nicht
funktionieren. Für Windows-Systeme gibt es im
» MSDN
eine komplette Übersicht der gültigen Platzhalter im Formatierungsstring.
Stattdessen sollte die Methode
IntlDateFormatter::format() verwendet werden.
format
format |
Beschreibung | Wertebeispiel |
---|---|---|
Tag | --- | --- |
%a |
Abgekürzter Name des Wochentages | So bis Sa |
%A |
Ausgeschriebener Name des Wochentages | Sonntag bis Samstag |
%d |
Tag des Monats als zweistellige Zahl (ggf. mit vorangestellter Null) | 01 bis 31 |
%e |
Tag des Monats; einstelligen Werten wird ein Leerzeichen vorangestellt. Unter Windows nicht wie beschrieben implementiert; siehe weiter unten für weitere Informationen. | 1 bis 31 |
%j |
Tag des Jahres als dreistellige Zahl, ggf. mit vorangestellten Nullen | 001 bis 366 |
%u |
Numerische Darstellung des Wochentags nach ISO-8601 |
1 (für Montag) bis 7 (für Sonntag)
|
%w |
Numerische Darstellung des Wochentags |
0 (für Sonntag) bis 6 (für Samstag)
|
Woche | --- | --- |
%U |
Nummer der Kalenderwoche des gegebenen Jahres, beginnend mit dem ersten Sonntag als erste Woche |
13 (für die 13. Kalenderwoche des Jahres)
|
%V |
Nummer der Kalenderwoche des gegebenen Jahres nach ISO-8601:1988, beginnend mit der ersten Woche des Jahres mit wenigstens 4 Wochentagen, wobei Montag der Start der Kalenderwoche ist |
01 bis 53 (wobei 53 eine
überlappende Woche repräsentiert)
|
%W |
Numerische Darstellung der Kalenderwoche, beginnend mit dem ersten Montag als erste Woche |
46 (für die 46. Woche des Jahres, die mit einem
Montag beginnt)
|
Monat | --- | --- |
%b |
Abgekürzter Monatsname gemäß dem Gebietsschema | Jan bis Dez |
%B |
Vollständiger Monatsname gemäß dem Gebietsschema | Januar bis Dezember |
%h |
Abgekürzter Monatsname gemäß dem Gebietsschema (ein Alias von %b) | Jan bis Dez |
%m |
Zweistellige numerische Darstellung des Monats |
01 (für Januar) bis 12 (für
Dezember)
|
Jahr | --- | --- |
%C |
Zweistellige numerische Darstellung des Jahrhunders (Jahr geteilt durch 100, abgerundet zu einer Ganzzahl) | 19 für das 20. Jahrhundert |
%g |
Zweistellige numerische Darstellung des Jahres gemäß dem ISO-8601:1988-Standard (siehe %V) |
Beispiel: 09 für die Woche des 6. Januar 2009
|
%G |
Die vollständige vierstellige numerische Version von %g |
Beispiel: 2009 für die Woche des 3. Januar 2009
|
%y |
Zweistellige numerische Darstellung des Jahres |
Beispiel: 09 für 2009, 79
für 1979
|
%Y |
Vierstellige numerische Darstellung des Jahres | Beispiel: 2038 |
Zeit | --- | --- |
%H |
Zweistellige numerische Darstellung der Stunde im 24-Stunden-Format | 00 bis 23 |
%k |
Stunde im 24-Stunden-Format mit einem Leerzeichen vor einstelligen Stunden | 0 bis 23 |
%I |
Zweistellige numerische Darstellung der Stunde im 12-Stunden-Format | 01 bis 12 |
%l (kleines 'L') |
Stunde im 12-Stunden-Format mit einem Leerzeichen vor einstelligen Stunden | 1 bis 12 |
%M |
Zweistellige numerische Darstellung der Minute | 00 bis 59 |
%p |
'AM' oder 'PM' in Großbuchstaben, basierend auf der gegebenen Zeit |
Beispiel: AM für 00:31, PM
für 22:23. Das genaue Ergebnis hängt vom Betriebssystem ab und es
können auch Varianten in Kleinbuchstaben oder mit Punkten (wie
a.m. ) zurückgegeben werden.
|
%P |
'am' oder 'pm' in Kleinbuchstaben, basierend auf der gegebenen Zeit |
Beispiel: am für 00:31, pm
für 22:23; wird nicht von allen Betriebssystem unterstützt.
|
%r |
Das gleiche wie "%I:%M:%S %p" | Beispiel: 09:34:17 PM für 21:34:17 |
%R |
Das gleiche wie "%H:%M" |
Beispiel: 00:35 für 12:35 AM,
16:44 für 4:44 PM
|
%S |
Zweistellige numerische Darstellung der Sekunde | 00 bis 59 |
%T |
Das gleiche wie "%H:%M:%S" | Beispiel: 21:34:17 für 09:34:17 PM |
%X |
Bevorzugte Zeitdarstellung gemäß dem Gebietsschema, ohne Datumsangabe |
Beispiel: 03:59:16 oder 15:59:16
|
%z |
Die Zeitverschiebung. Unter Windows nicht wie beschrieben implementiert; siehe weiter unten für weitere Informationen. | Beispiel: -0500 für US Eastern Time |
%Z |
Das Zeitzonenkürzel. Unter Windows nicht wie beschrieben implementiert; siehe weiter unten für weitere Informationen. | Beispiel: EST für Eastern Time |
Datums- und Zeitstempel | --- | --- |
%c |
Bevorzugter Datums- und Zeitstempel gemäß dem Gebietsschema |
Beispiel: 05.02.2009 00:45:10 für den 5.
Februar 2009 um 00:45:10
|
%D |
Das gleiche wie "%m/%d/%y" | Beispiel: 02/05/09 für den 5. Februar 2009 |
%F |
Das gleiche wie "%Y-%m-%d" (oft verwendet für Datenbankzeitstempel) |
Beispiel: 2009-02-05 für den 5. Februar 2009
|
%s |
Zeitstempel der Unix-Epochenzeit (das gleiche wie die Funktion time()) |
Beispiel: 305815200 für den 10. September 1979,
08:40:00
|
%x |
Bevorzugte Datumsdarstellung gemäß dem Gebietsschema, ohne Zeitangabe |
Beispiel: 02/05/09 für den 5. Februar 2009
|
Verschiedenes | --- | --- |
%n |
Ein Zeilenvorschubzeichen ("\n") | --- |
%t |
Ein Tabulatorzeichen ("\t") | --- |
%% |
Ein buchstäbliches Prozentzeichen ("%") | --- |
Im Gegensatz zu ISO-9899:1999 beginnt Sun Solaris mit Sonntag als 1.
Daraus folgt, dass %u
nicht wie in diesem Handbuch
beschrieben funktionieren kann.
Nur für Windows:
Der Platzhalter %e
wird in der
Windows-Implementierung dieser Funktion nicht unterstützt. Um diesen
Wert zu erhalten, kann stattdessen der Platzhalter
%#d
verwendet werden. Das Beispiel weiter unten
zeigt, wie eine Plattformübergreifende kompatible Funktion geschrieben
werden kann.
Die Platzhalter %z
und %Z
geben
beide den Namen der Zeitzone anstelle der Zeitverschiebung oder des
Kürzels zurück.
Nur für macOS und musl: Der Platzhalter
%P
wird in der macOS-Implementierung dieser
Funktion nicht unterstützt.
timestamp
Der optionale Parameter timestamp
ist ein Unix-Zeitstempel
vom Typ int. Falls timestamp
nicht übergeben
wird oder null
ist, wird die aktuelle lokale Zeit als Standardwert verwendet.
Er entspricht dann also dem Ergebnis der Funktion time().
Gibt eine Zeichenkette zurück, die gemäß format
formatiert ist, wobei der angegebene Zeitstempel
timestamp
verwendet wird, oder die aktuelle
Ortszeit, falls kein Zeitstempel angegeben wurde. Monats- und
Wochentagsnamen sowie andere sprachabhängige Zeichenketten werden
entsprechend des per setlocale() eingestellten Wertes
dargestellt. Die Funktion gibt false
zurück, wenn
format
leer ist, nicht unterstützte
Konvertierungsangaben enthält, oder wenn die Länge der zurückgegebenen
Zeichenkette größer als 4095
wäre.
Wenn die Zeitzone ungültig ist, wird bei jedem Aufruf einer Datums/Zeit-Funktion
ein Fehler der Stufe E_WARNING
erzeugt. Siehe auch
date_default_timezone_set()
Da die Ausgabe von der zugrundeliegenden C-Bibliothek abhängt, werden
einige Konvertierungszeichen nicht unterstützt. Unter Windows führt die
Angabe unbekannter Konvertierungszeichen zu 5
E_WARNING
-Meldungen und die Funktion gibt false
zurück. Unter anderen Betriebssystemen werden unter Umständen keine
E_WARNING
-Meldungen erzeugt und die Ausgabe enthält
möglicherweise unveränderte Konvertierungszeichen.
Version | Beschreibung |
---|---|
8.0.0 |
timestamp ist nun nullable (akzeptiert den
null -Wert).
|
Dieses Beispiel funktioniert nur, wenn auf dem System die entsprechenden Gebietsschemen installiert sind.
Beispiel #1 strftime()-Gebietsschema-Beispiele
<?php
setlocale(LC_TIME, "C");
echo strftime("%A");
setlocale(LC_TIME, "fi_FI");
echo strftime(" in Finnish is %A,");
setlocale(LC_TIME, "fr_FR");
echo strftime(" in French %A and");
setlocale(LC_TIME, "de_DE");
echo strftime(" in German %A.\n");
?>
Beispiel #2 ISO 8601:1988 Wochennummer-Beispiel
<?php
/* Dezember 2002 / Januar 2003
ISOWk Mo Di Mi Do Fr Sa So
----- ----------------------------
51 16 17 18 19 20 21 22
52 23 24 25 26 27 28 29
1 30 31 1 2 3 4 5
2 6 7 8 9 10 11 12
3 13 14 15 16 17 18 19 */
// Ausgabe: 28.12.2002 - %V,%G,%Y = 52,2002,2002
echo "28.12.2002 - %V,%G,%Y = " . strftime("%V,%G,%Y", strtotime("12/28/2002")) . "\n";
// Ausgabe: 30.12.2002 - %V,%G,%Y = 1,2003,2002
echo "30.12.2002 - %V,%G,%Y = " . strftime("%V,%G,%Y", strtotime("12/30/2002")) . "\n";
// Ausgabe: 03.01.2003 - %V,%G,%Y = 1,2003,2003
echo "03.01.2003 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/3/2003")) . "\n";
// Ausgabe: 10.01.2003 - %V,%G,%Y = 2,2003,2003
echo "10.01.2003 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/10/2003")) . "\n";
/* Dezember 2004 / Januar 2005
ISOWk Mo Di Mi Do Fr Sa So
----- ----------------------------
51 13 14 15 16 17 18 19
52 20 21 22 23 24 25 26
53 27 28 29 30 31 1 2
1 3 4 5 6 7 8 9
2 10 11 12 13 14 15 16 */
// Ausgabe: 23.12.2004 - %V,%G,%Y = 52,2004,2004
echo "23.12.2004 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("12/23/2004")) . "\n";
// Ausgabe: 31.12.2004 - %V,%G,%Y = 53,2004,2004
echo "31.12.2004- %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("12/31/2004")) . "\n";
// Ausgabe: 02.01.2005 - %V,%G,%Y = 53,2004,2005
echo "02.01.2005 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/2/2005")) . "\n";
// Ausgabe: 03.01.2005 - %V,%G,%Y = 1,2005,2005
echo "03.01.2005 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/3/2005")) . "\n";
?>
Beispiel #3 Plattformübergreifendes Beispiel unter Verwendung des Platzhalters %e
<?php
// 1. Januar ergibt: '%e%1%' (%%, e, %%, %e, %%)
$format = '%%e%%%e%%';
// Prüfe auf Windows, um den Platzhalter %e korrekt zu ersetzen
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
$format = preg_replace('#(?<!%)((?:%%)*)%e#', '\1%#d', $format);
}
echo strftime($format);
?>
Beispiel #4 Zeige alle bekannten und unbekannten Formate an.
<?php
// Beschreibe die Formate.
$strftimeFormats = array(
'A' => 'Ausgeschriebener Name des Wochentages',
'B' => 'Vollständiger Monatsname gemäß dem Gebietsschema',
'C' => 'Zweistellige numerische Darstellung des Jahrhunders (Jahr geteilt durch 100, abgerundet zu einer Ganzzahl)',
'D' => 'Das gleiche wie "%m/%d/%y"',
'E' => '',
'F' => 'Das gleiche wie "%Y-%m-%d"',
'G' => 'Vollständige vierstellige numerische Version von %g',
'H' => 'Zweistellige numerische Darstellung der Stunde im 24-Stunden-Format',
'I' => 'Zweistellige numerische Darstellung der Stunde im 12-Stunden-Format',
'J' => '',
'K' => '',
'L' => '',
'M' => 'Zweistellige numerische Darstellung der Minute',
'N' => '',
'O' => '',
'P' => '"am" oder "pm" in Kleinbuchstaben, basierend auf der gegebenen Zeit',
'Q' => '',
'R' => 'Das gleiche wie "%H:%M"',
'S' => 'Zweistellige numerische Darstellung der Sekunde',
'T' => 'Das gleiche wie "%H:%M:%S"',
'U' => 'Nummer der Kalenderwoche des angegebenen Jahres, beginnend mit dem ersten Sonntag als erste Woche',
'V' => 'Nummer der Kalenderwoche des angegebenen Jahres gemäß ISO-8601:1988, beginnend mit der ersten Woche des Jahres mit wenigstens 4 Wochentagen, wobei Montag der Start der Kalenderwoche ist',
'W' => 'Numerische Darstellung der Kalenderwoche, beginnend mit dem ersten Montag als erste Woche',
'X' => 'Bevorzugte Zeitdarstellung gemäß dem Gebietsschema, ohne Datumsangabe',
'Y' => 'Vierstellige numerische Darstellung des Jahres',
'Z' => 'Das Zeitzonenkürzel oder die Zeitzone (abhängig vom Betriebssystem)',
'a' => 'Abgekürzter Name des Wochentages',
'b' => 'Abgekürzter Monatsname gemäß dem Gebietsschema',
'c' => 'Bevorzugter Datums- und Zeitstempel gemäß dem Gebietsschema',
'd' => 'Tag des Monats als zweistellige Zahl (ggf. mit vorangestellten Nullen)',
'e' => 'Tag des Monats als Dezimalwert; einstelligen Werten wird ein Leerzeichen vorangestellt',
'f' => '',
'g' => 'Zweistellige numerische Darstellung des Jahres gemäß dem ISO-8601:1988-Standard (siehe %V)',
'h' => 'Abgekürzter Monatsname gemäß dem Gebietsschema (ein Alias von %b)',
'i' => '',
'j' => 'Tag des Jahres als dreistellige Zahl, ggf. mit vorangestellten Nullen',
'k' => 'Stunde im 24-Stunden-Format mit einem Leerzeichen vor einstelligen Stunden',
'l' => 'Stunde im 12-Stunden-Format mit einem Leerzeichen vor einstelligen Stunden',
'm' => 'Zweistellige numerische Darstellung des Monats',
'n' => 'Ein Zeilenvorschubzeichen ("\n")',
'o' => '',
'p' => '"AM" oder "PM" in Großbuchstaben, basierend auf der gegebenen Zeit',
'q' => '',
'r' => 'Das gleiche wie "%I:%M:%S %p"',
's' => 'Zeitstempel der Unix-Epochenzeit',
't' => 'Ein Tabulatorzeichen ("\t")',
'u' => 'Numerische Darstellung des Wochentags gemäß ISO-8601',
'v' => '',
'w' => 'Numerische Darstellung des Wochentags',
'x' => 'Bevorzugte Datumsdarstellung gemäß dem Gebietsschema, ohne Zeitangabe',
'y' => 'Zweistellige numerische Darstellung des Jahres',
'z' => 'Entweder die Zeitverschiebung gegenüber UTC oder das Zeitzonenkürzel (abhängig vom Betriebssystem)',
'%' => 'Ein buchstäbliches Prozentzeichen ("%")',
);
// Ergebnisse.
$strftimeValues = array();
// Werte die Formate aus und unterdrücke dabei eventuelle Fehler.
foreach($strftimeFormats as $format => $description){
if (False !== ($value = @strftime("%{$format}"))){
$strftimeValues[$format] = $value;
}
}
// Ermittle den längsten Wert.
$maxValueLength = 2 + max(array_map('strlen', $strftimeValues));
// Melde bekannte Formate.
foreach($strftimeValues as $format => $value){
echo "Bekanntes Format : '{$format}' = ", str_pad("'{$value}'", $maxValueLength), " ( {$strftimeFormats[$format]} )\n";
}
// Melde unbekannte Formate.
foreach(array_diff_key($strftimeFormats, $strftimeValues) as $format => $description){
echo "Unbekanntes Format : '{$format}' ", str_pad(' ', $maxValueLength), ($description ? " ( {$description} )" : ''), "\n";
}
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Bekanntes Format : 'A' = 'Freitag' ( Ausgeschriebener Name des Wochentages ) Bekanntes Format : 'B' = 'Dezember' ( Vollständiger Monatsname gemäß dem Gebietsschema ) Bekanntes Format : 'C' = '20' ( Zweistellige numerische Darstellung des Jahrhunders (Jahr geteilt durch 100, abgerundet zu einer Ganzzahl) ) Bekanntes Format : 'D' = '12/03/10' ( Das gleiche wie "%m/%d/%y" ) Bekanntes Format : 'F' = '2010-12-03' ( Das gleiche wie "%Y-%m-%d" ) Bekanntes Format : 'G' = '2010' ( Vollständige vierstellige numerische Version von %g ) Bekanntes Format : 'H' = '11' ( Zweistellige numerische Darstellung der Stunde im 24-Stunden-Format ) Bekanntes Format : 'I' = '11' ( Zweistellige numerische Darstellung der Stunde im 12-Stunden-Format ) Bekanntes Format : 'M' = '24' ( Zweistellige numerische Darstellung der Minute ) Bekanntes Format : 'R' = '11:24' ( Das gleiche wie "%H:%M" ) Bekanntes Format : 'S' = '44' ( Zweistellige numerische Darstellung der Sekunde ) Bekanntes Format : 'T' = '11:24:44' ( Das gleiche wie "%H:%M:%S" ) Bekanntes Format : 'U' = '48' ( Nummer der Kalenderwoche des angegebenen Jahres, beginnend mit dem ersten Sonntag als erste Woche ) Bekanntes Format : 'V' = '48' ( Nummer der Kalenderwoche des angegebenen Jahres gemäß ISO-8601:1988, beginnend mit der ersten Woche des Jahres mit wenigstens 4 Wochentagen, wobei Montag der Start der Kalenderwoche ist ) Bekanntes Format : 'W' = '48' ( Numerische Darstellung der Kalenderwoche, beginnend mit dem ersten Montag als erste Woche ) Bekanntes Format : 'X' = '11:24:44' ( Bevorzugte Zeitdarstellung gemäß dem Gebietsschema, ohne Datumsangabe ) Bekanntes Format : 'Y' = '2010' ( Vierstellige numerische Darstellung des Jahres ) Bekanntes Format : 'Z' = 'Mitteleuropäische Zeit' ( Das Zeitzonenkürzel oder die Zeitzone (abhängig vom Betriebssystem) ) Bekanntes Format : 'a' = 'Fr' ( Abgekürzter Name des Wochentages ) Bekanntes Format : 'b' = 'Dez' ( Abgekürzter Monatsname gemäß dem Gebietsschema ) Bekanntes Format : 'c' = '03.12.2010 11:24:44' ( Bevorzugter Datums- und Zeitstempel gemäß dem Gebietsschema ) Bekanntes Format : 'd' = '03' ( Tag des Monats als zweistellige Zahl (ggf. mit vorangestellten Nullen) ) Bekanntes Format : 'e' = ' 3' ( Tag des Monats als Dezimalwert; einstelligen Werten wird ein Leerzeichen voran gestellt ) Bekanntes Format : 'g' = '10' ( Zweistellige numerische Darstellung des Jahres gemäß dem ISO-8601:1988-Standard (siehe %V) ) Bekanntes Format : 'h' = 'Dez' ( Abgekürzter Monatsname gemäß dem Gebietsschema (ein Alias von %b) ) Bekanntes Format : 'j' = '337' ( Tag des Jahres als dreistellige Zahl, ggf. mit vorangestellten Nullen ) Bekanntes Format : 'm' = '12' ( Zweistellige numerische Darstellung des Monats ) Bekanntes Format : 'n' = ' ' ( Ein Zeilenvorschubzeichen ("\n") ) Bekanntes Format : 'r' = '11:24:44' ( Das gleiche wie "%I:%M:%S %p" ) Bekanntes Format : 't' = ' ' ( Ein Tabulatorzeichen ("\t") ) Bekanntes Format : 'u' = '5' ( Numerische Darstellung des Wochentags gemäß ISO-8601 ) Bekanntes Format : 'w' = '5' ( Numerische Darstellung des Wochentags ) Bekanntes Format : 'x' = '03.12.2010' ( Bevorzugte Datumsdarstellung gemäß dem Gebietsschema, ohne Zeitangabe ) Bekanntes Format : 'y' = '10' ( Zweistellige numerische Darstellung des Jahres ) Bekanntes Format : 'z' = '+0100' ( Entweder der Zeitverschiebung gegenüber UTC oder das Zeitzonenkürzel (abhängig vom Betriebssystem) ) Bekanntes Format : '%' = '%' ( Ein buchstäbliches Prozentzeichen ("%") ) Unbekanntes Format : 'E' Unbekanntes Format : 'J' Unbekanntes Format : 'K' Unbekanntes Format : 'L' Unbekanntes Format : 'N' Unbekanntes Format : 'O' Unbekanntes Format : 'P' ( "am" oder "pm" in Kleinbuchstaben, basierend auf der gegebenen Zeit ) Unbekanntes Format : 'Q' Unbekanntes Format : 'f' Unbekanntes Format : 'i' Unbekanntes Format : 'k' ( Stunde im 24-Stunden-Format mit einem Leerzeichen vor einstelligen Stunden ) Unbekanntes Format : 'l' ( Stunde im 12-Stunden-Format mit einem Leerzeichen vor einstelligen Stunden ) Unbekanntes Format : 'o' Unbekanntes Format : 'p' ( "AM" oder "PM" in Großbuchstaben, basierend auf der gegebenen Zeit ) Unbekanntes Format : 'q' Unbekanntes Format : 's' ( Zeitstempel der Unix-Epochenzeit ) Unbekanntes Format : 'v'
Hinweis: %G und %V, die auf ISO 8601:1988-Wochennummern basieren, können unerwartete (obgleich richtige) Ergebnisse ergeben, wenn das Nummernsystem nicht genau verstanden wird. Siehe die %V Beispiele auf dieser Handbuchseite.
there is a strftime compatibility package for php>=8.1 at https://github.com/alphp/strftime