Datumsformate

Diese Seite beschreibt die verschiedenen Datumsformate, die der Parser von DateTimeImmutable, DateTime, date_create(), date_create_immutable() und strtotime() versteht.

Verwendete Symbole
Beschreibung Format Beispiele
daysuf (Suffix für einen Tag des Monats) "st" | "nd" | "rd" | "th"  
dd (Tag des Monats; ohne vorangestellte Null) ([0-2]?[0-9] | "3"[01]) daysuf? "7th", "22nd", "31"
DD (Tag des Monats; zwei Ziffern mit vorangestellter Null) "0" [0-9] | [1-2][0-9] | "3" [01] "07", "31"
m (vollständiger oder abgekürzter Monatsname) 'january' | 'february' | 'march' | 'april' | 'may' | 'june' | 'july' | 'august' | 'september' | 'october' | 'november' | 'december' | 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec' | "I" | "II" | "III" | "IV" | "V" | "VI" | "VII" | "VIII" | "IX" | "X" | "XI" | "XII"  
M (Monatskürzel) 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec'  
mm (Nummer des Monats) "0"? [0-9] | "1"[0-2] "0", "04", "7", "12"
MM (Nummer des Monats; mit vorangestellter Null) "0" [0-9] | "1"[0-2] "00", "04", "07", "12"
y (Jahr) [0-9]{1,4} "00", "78", "08", "8", "2008"
yy (Jahr; zwei Ziffern) [0-9]{2} "00", "08", "78"
YY (Jahr; vier Ziffern) [0-9]{4} "2000", "2008", "1978"
Lokalisierte Schreibweisen
Beschreibung Format Beispiele
Monat und Tag; amerikanische Schreibweise mm "/" dd "5/12", "10/27"
Monat, Tag und Jahr; amerikanische Schreibweise mm "/" dd "/" y "12/22/78", "1/17/2006", "1/17/6"
Jahr (vier Ziffern), Monat und Tag; getrennt durch Schrägstriche YY "/" mm "/" dd "2008/6/30", "1978/12/22"
Jahr (vier Ziffern) und Monat (GNU) YY "-" mm "2008-6", "2008-06", "1978-12"
Jahr, Monat und Tag; getrennt durch Bindestriche y "-" mm "-" dd "2008-6-30", "78-12-22", "8-6-21"
Tag, Monat und Jahr (vier Ziffern); getrennt durch Punkte, Tabulatorzeichen oder Bindestriche dd [.\t-] mm [.-] YY "30-6-2008", "22.12.1978"
Tag, Monat und Jahr (zwei Ziffern); getrennt durch Punkte oder Tabulatorzeichen dd [.\t] mm "." yy "30.6.08", "22\t12.78"
Tag, Monat (textuell) und Jahr dd ([ \t.-])* m ([ \t.-])* y "30-June 2008", "22DEC78", "14 III 1879"
Monat (textuell) und Jahr (vier Ziffern); der Tag wird auf den 1. zurückgesetzt m ([ \t.-])* YY "June 2008", "DEC1978", "March 1879"
Jahr (vier Ziffern) und Monat (textuell); der Tag wird auf den 1. zurückgesetzt YY ([ \t.-])* m "2008 June", "1978-XII", "1879.MArCH"
Monat (textuell), Tag und Jahr m ([ .\t-])* dd [,.stndrh\t ]+ y "July 1st, 2008", "April 17, 1790", "May.9,78"
Monat (textuell) und Tag m ([ .\t-])* dd [,.stndrh\t ]* "July 1st,", "Apr 17", "May.9"
Tag und Monat (textuell) dd ([ .\t-])* m "1 July", "17 Apr", "9.May"
Monatskürzel, Tag und Jahr M "-" DD "-" y "May-09-78", "Apr-17-1790"
Jahr, Monatskürzel und Tag y "-" M "-" DD "78-Dec-22", "1814-MAY-17"
Jahr (und zwar nur das Jahr) YY "1978", "2008"
Monat (textuell) (und zwar nur der Monat) m "March", "jun", "DEC"
Schreibweisen nach ISO8601
Beschreibung Format Beispiele
Acht Ziffern für Jahr, Monat und Tag YY MM DD "15810726", "19780417", "18140517"
Jahr (vier Ziffern), Monat und Tag; getrennt durch Schrägstriche YY "/" MM "/" DD "2008/06/30", "1978/12/22"
Jahr (zwei Ziffern), Monat und Tag; getrennt durch Schrägstriche yy "-" MM "-" DD "08-06-30", "78-12-22"
Jahr (vier Ziffern, optional mit Vorzeichen), Monat und Tag [+-]? YY "-" MM "-" DD "-0002-07-26", "+1978-04-17", "1814-05-17"

Hinweis:

Bei den Formaten y und yy werden Jahreszahlen unter 100 auf besondere Weise behandelt. Liegt die Jahreszahl im Bereich 0-69 (einschließlich), wird 2000 addiert, liegt sie im Bereich 70-99 (einschließlich), wird 1900 addiert. Das bedeutet, dass "00-01-01" als "2000-01-01" interpretiert wird.

Hinweis:

Das Format "Tag, Monat und Jahr (zwei Ziffern); getrennt durch Punkte oder Tabulatorzeichen" (dd [.\t] mm ". " yy) funktioniert nur für Jahre im Bereich 61-99 (einschließlich). Außerhalb dieses Bereichs hat das Zeitformat "HH [.:] MM [.:] SS" Vorrang.

Hinweis:

Das Format "Jahr (und zwar nur das Jahr)" funktioniert nur, wenn die Zeitangabe bereits gefunden wurde. Andernfalls werden die vier Ziffern als HH MM interpretiert.

Achtung

Es ist möglich, die Formate dd und DD zu über- oder unterschreiten. Dabei bezeichnet der Tag 0 den letzten Tag des vorherigen Monats, während eine Überschreitung zum nächsten Monat gezählt wird. Somit entspricht "2008-08-00" dem "2008-07-31" und "2008-06-31" dem "2008-07-01" (der Juni hat nur 30 Tage).

Wie aus dem obigen regulären Ausdruck hervorgeht, ist der Wertebereich für den Tag auf 0-31 beschränkt. So ist z. B. "2008-06-32" keine gültige Datumsangabe.

Es ist auch möglich, die Formate mm und MM mit dem Wert 0 zu unterschreiten. Dabei steht der Monat 0 für den Dezember des Vorjahres. Zum Beispiel ist "2008-00-22" gleichbedeutend mit "2007-12-22".

Wenn die beiden vorherigen Fälle kombiniert werden und sowohl der Tag als auch der Monat unterlaufen werden, geschieht Folgendes: "2008-00-00" wird zunächst in "2007-12-00" umgewandelt, das dann in "2007-11-30" umgewandelt wird. Dies geschieht auch mit der Zeichenkette "0000-00-00", die in "-0001-11-30" umgewandelt wird (das Jahr -1 im ISO 8601-Kalender, das dem Jahr 2 vor Christus im proleptischen gregorianischen Kalender entspricht).

add a note

User Contributed Notes 1 note

up
0
aryfilipiak at gmail dot com
5 months ago
The ISO 8601 has the Week Date. I wrote this function. I hope that it can help someone.
If second parameter is not empty it assumes that $a is the year, $b the month and $c the day, and return basic ISO week date: YYYYWwwD (default) or extended: YYYY-Www-D (if $x is true);
If just first parameter is not empty assumes it is a ISO week date (basic or extended), and return  the Unix timestamp.

function ISOwd($a,$b='',$c='',$x=false) {
    if (!$b) {
        if (!preg_match_all('/([0-9]{4})-*W*([0-9]{2})-*([0-9]{1})/', $a, $m, PREG_SET_ORDER))
            return null;
        /* Now year is $m[0][1], week is $m[0][2] and day is $m[0][3] */
        $fd = mktime(0,0,0,1,1,$m[0][1]);  // first day of the first week of the year
        $n  = date('N', $fd);
        /* if ($n==7) $fd=2;  if ($n==6) $fd=3;  if ($n==5) $fd=4;
           if ($n==4) $fd=29; if ($n==3) $fd=30; if ($n==2) $fd=31; if ($n==1) $fd=1; */
        if ($n>4) $fd = mktime(0,0,0,1,9-$n,$m[0][1]);
        elseif ($n>1) $fd = mktime(0,0,0,12,33-$n,$m[0][1]-1);
        return strtotime(date('d-m-Y',$fd).' + '.($m[0][2]-1).' week'.' + '.($m[0][3]-1).' days');
    }
    $f = ($x) ? 'o-\WW-N' : 'o\WWN'; // basic / extended format
    return date($f, mktime(0,0,0,$b,$c,$a));
}
// Example:
echo $test = ISOwd(date('y'),date('m'),date('d'));
echo '<br>';
echo date('y-m-d',ISOwd($test));
echo '<br>';
echo $test = ISOwd(date('y'),date('m'),date('d'),true);
echo '<br>';
echo date('y-m-d',ISOwd($test));
To Top