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:
Beschreibung
$format
, ?int $timestamp
= null
): string|falseFormatiert 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.
Parameter-Liste
-
format
-
Folgende Zeichen werden in der Zeichenkette des Parameters format
erkanntformat
Beschreibung Wertebeispiel Tag --- --- %a
Abgekürzter Name des Wochentages So
bisSa
%A
Ausgeschriebener Name des Wochentages Sonntag
bisSamstag
%d
Tag des Monats als zweistellige Zahl (ggf. mit vorangestellter Null) 01
bis31
%e
Tag des Monats; einstelligen Werten wird ein Leerzeichen vorangestellt. Unter Windows nicht wie beschrieben implementiert; siehe weiter unten für weitere Informationen. 1
bis31
%j
Tag des Jahres als dreistellige Zahl, ggf. mit vorangestellten Nullen 001
bis366
%u
Numerische Darstellung des Wochentags nach ISO-8601 1
(für Montag) bis7
(für Sonntag)%w
Numerische Darstellung des Wochentags 0
(für Sonntag) bis6
(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
bis53
(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
bisDez
%B
Vollständiger Monatsname gemäß dem Gebietsschema Januar
bisDezember
%h
Abgekürzter Monatsname gemäß dem Gebietsschema (ein Alias von %b) Jan
bisDez
%m
Zweistellige numerische Darstellung des Monats 01
(für Januar) bis12
(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
bis23
%k
Stunde im 24-Stunden-Format mit einem Leerzeichen vor einstelligen Stunden 0
bis23
%I
Zweistellige numerische Darstellung der Stunde im 12-Stunden-Format 01
bis12
%l (kleines 'L')
Stunde im 12-Stunden-Format mit einem Leerzeichen vor einstelligen Stunden 1
bis12
%M
Zweistellige numerische Darstellung der Minute 00
bis59
%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 (wiea.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
bis59
%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
oder15: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 TimeDatums- 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 2009Verschiedenes --- --- %n
Ein Zeilenvorschubzeichen ("\n") --- %t
Ein Tabulatorzeichen ("\t") --- %%
Ein buchstäbliches Prozentzeichen ("%") --- WarnungIm Gegensatz zu ISO-9899:1999 beginnt Sun Solaris mit Sonntag als 1. Daraus folgt, dass
%u
nicht wie in diesem Handbuch beschrieben funktionieren kann.WarnungNur 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.WarnungNur 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-Timestamp als int oder die aktuelle lokale Zeit, wenntimestamp
nicht übergeben wurde odernull
ist. Er entspricht dann also dem Ergebnis der Funktion time().
Rückgabewerte
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.
Fehler/Exceptions
Jeder Aufruf der Datums- und Zeitfunktionen generiert einen Fehler der Stufe
E_WARNING
, wenn die Zeitzone ungültig ist. 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.
Changelog
Version | Beschreibung |
---|---|
8.0.0 |
timestamp ist nun nullable (akzeptiert den
null -Wert).
|
Beispiele
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'
Anmerkungen
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.
Siehe auch
- » Online strftime() Format-Erstellungstool
- setlocale() - Legt regionale (locale) Einstellungen fest
- mktime() - Liefert den Unix-Zeitstempel für ein Datum
- strptime() - Wertet eine Zeit-/Datumsangabe aus, die mit strftime erzeugt wurde
- gmstrftime() - Formatiert eine Datums-/Zeitangabe in GMT/UTC-Format entsprechend den lokalen Einstellungen
- » Open-Group-Spezifikation von strftime()