strftime

(PHP 4, PHP 5, PHP 7)

strftimeFormatiere eine Zeit-/Datumsangabe gemäß dem Gebietsschema

Beschreibung

strftime ( string $format [, int $timestamp = time() ] ) : string

Formatiere 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 Ihre C-Bibliothek nicht alle angegebenen Formatierungszeichen erkennt. In diesem Fall werden diese Zeichen von der PHP-Funktion strftime() nicht unterstützt. Zusätzlich unterstützen nicht alle Plattformen negative Werte eines Timestamps, deshalb könnte der Wertebereich eines Datums durch den Beginn der Unix Epoche begrenzt sein. Das bedeutet, dass z.B. %e, %T, %R und %D (und vielleicht noch weitere) und Zeitangaben vor dem Jan 1, 1970 auf Windowssystemen, einigen Linuxdistributionen und einigen anderen Betriebssytemen nicht funktionieren. Für Windowsbetriebssysteme finden Sie eine komplette Übersicht der gültigen Platzhalter im Formatierungsstring im » MSDN.

Parameter-Liste

format

Folgende Zeichen werden in der format Parameterzeichenkette erkannt
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 vorangestellten Nullen) 01 bis 31
%e Tag des Monats als Dezimal-Wert; einstelligen Werten wird ein Leerzeichen voran gestellt. 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 ISO-8601 numerische Darstellung des Wochentages 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 ISO-8601:1988 Kalenderwochennummer des gegebenen Jahres, 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: 2008 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
%P 'am' oder 'pm' in Kleinbuchstaben, basierend auf der gegebenen Zeit Beispiel: am für 00:31, pm für 22:23
%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 Der Zeitzonen-Versatz. 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" Example: 02/05/09 für den 5. Februar 2009
%F Same as "%Y-%m-%d" (oft verwendet für Datenbankzeitstempel) Example: 2009-02-05 für den 5. Februar 2009
%s Zeitstempel der Unix-Epochenzeit (das gleiche wie die time() Funktion) 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 ("%") ---

Die Höchstlänge dieses Parameters sind 1023 Zeichen.

Warnung

Im Gegensatz zu ISO-9899:1999 beginnt mit Sonntag als 1. Daraus folgt, dass %u nicht wie in diesem Handbuch beschrieben funktionieren kann.

Warnung

Nur für Windows:

Der %e Platzhalter wird nicht in der Windows Implementierung dieser Funktion unterstützt. Um diesen Wert zu erhalten, kann der %#d Platzhalter statt dessen verwendet werden. Das Beispiel weiter unten zeigt wie eine Plattform übergreifende kompatible Funktion geschrieben werden kann.

Die %z und %Z Platzhalter geben beide den Namen der Zeitzone anstelle des Versatzes oder des Kürzels zurück.

Warnung

Nur für macOS: Der %P Platzhalter wird nicht in der macOS Implementierung dieser Funktion unterstüzt.

timestamp

Der optionale Parameter timestamp ist ein Unix Timestamp als integer oder die aktuelle lokale Zeit wenn kein timestamp übergeben wurde. Er entspricht dann also dem Ergebnis der Funktion time().

Rückgabewerte

Gibt eine Zeichenkette zurück, die gemäß format unter Verwendung des angegebenen timestamp oder der aktuellen Ortszeit, falls kein Zeitstempel angegeben wurde, formatiert ist. Monats- und Wochentagsnamen sowie andere sprachabhängige Zeichenketten werden entsprechend des per setlocale() eingestellten Wertes dargestellt.

Fehler/Exceptions

Jeder Aufruf der Datums- und Zeitfunktionen generiert eine E_NOTICE-Warnung, wenn die Zeitzone ungültig ist und eine E_STRICT-Nachricht oder eine E_WARNING-Warnung, wenn die Systemeinstellung oder die TZ-Umgebungsvariable genutzt wird. Siehe auch date_default_timezone_set()

Da die Ausgabe von der unterliegenden C-Bibliothek abhängt, werden einige Konversionsangaben nicht unterstützt. Unter Window führt die Angabe von Konversionsangaben 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 kann die Konversionsangaben unverändert enthalten.

Changelog

Version Beschreibung
5.1.0

Erzeugt nun E_STRICT- und E_NOTICE-Zeitzonenfehler.

Beispiele

Dieses Beispiel funktioniert nur, wenn auf Ihrem System die entsprechenden Locales installiert sind.

Beispiel #1 strftime() locale Beispiel

<?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 %e Platzhalters

<?php

// 1. Januar ergibt: '%e%1%' (%%, e, %%, %e, %%)
$format '%%e%%%e%%';

// Prüfe auf Windows, um den %e Platzhalter korrekt zu ersetzen
if (strtoupper(substr(PHP_OS03)) == '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' => 'Same as "%Y-%m-%d"',
    
'G' => 'Die 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 gegebenen Jahres, beginnend mit dem ersten Sonntag als erste Woche',
    
'V' => 'ISO-8601:1988 Kalenderwochennummer des gegebenen Jahres, 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 Dezimal-Wert; einstelligen Werten wird ein Leerzeichen voran gestellt',
    
'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' => 'ISO-8601 numerische Darstellung des Wochentages',
    
'v' => '',
    
'w' => 'Numerische Darstellung des Wochentags',
    
'x' => 'Bevorzugte Datumsdarstellung gemäß dem Gebietsschema, ohne Zeitangabe',
    
'y' => 'Zweistellige numerische Darstellung des Jahres',
    
'z' => 'Entweder der Zeitzonenversatz zu UTC oder das Zeitzonenkürzel (depends on operating system)',
    
'%' => 'Ein buchstäbliches Prozentzeichen ("%")',
);

// Ergebnisse.
$strftimeValues = array();

// Werte die Formate aus während jegliche Fehler unterdrückt werden.
foreach($strftimeFormats as $format => $description){
    if (
False !== ($value = @strftime("%{$format}"))){
        
$strftimeValues[$format] = $value;
    }
}

// Ermittle den längsten Wert.
$maxValueLength max(array_map('strlen'$strftimeValues));

// Berichte bekannte Formate.
foreach($strftimeValues as $format => $value){
    echo 
"Bekanntes Format   : '{$format}' = "str_pad("'{$value}'"$maxValueLength), " ( {$strftimeFormats[$format]} )\n";
}

// Berichte 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'             ( Same as "%Y-%m-%d" )
Bekanntes Format   : 'G' = '2010'                   ( Die 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 gegebenen Jahres, beginnend mit dem ersten Sonntag als erste Woche )
Bekanntes Format   : 'V' = '48'                     ( ISO-8601:1988 Kalenderwochennummer des gegebenen Jahres, 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 Dezimal-Wert; 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'                      ( ISO-8601 numerische Darstellung des Wochentages )
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 Zeitzonenversatz zu UTC oder das Zeitzonenkürzel (depends on operating system) )
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 gründlich verstanden wird. Siehe die %V Beispiele auf dieser Handbuchseite.

Siehe auch