This page describes the different date formats in a BNF-like syntax, that the DateTimeImmutable, DateTime, date_create(), date_create_immutable(), and strtotime() parser understands.
To format DateTimeImmutable and DateTime objects, please refer to the documentation of the DateTimeInterface::format() method.
| Description | Format | Examples | 
|---|---|---|
| daysuf | "st" | "nd" | "rd" | "th" | |
| dd | ([0-2]?[0-9] | "3"[01]) daysuf? | "7th", "22nd", "31" | 
| DD | "0" [0-9] | [1-2][0-9] | "3" [01] | "07", "31" | 
| m | '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 | 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec' | |
| mm | "0"? [0-9] | "1"[0-2] | "0", "04", "7", "12" | 
| MM | "0" [0-9] | "1"[0-2] | "00", "04", "07", "12" | 
| y | [0-9]{1,4} | "00", "78", "08", "8", "2008" | 
| yy | [0-9]{2} | "00", "08", "78" | 
| YY | [0-9]{4} | "2000", "2008", "1978" | 
| YYY | [0-9]{5,19} | "81412", "20192" | 
| Description | Format | Examples | 
|---|---|---|
| American month and day | mm"/"dd | "5/12", "10/27" | 
| American month, day and year | mm"/"dd"/"y | "12/22/78", "1/17/2006", "1/17/6" | 
| Four digit year, month and day with slashes | YY"/"mm"/"dd | "2008/6/30", "1978/12/22" | 
| Four digit year and month (GNU) | YY"-"mm | "2008-6", "2008-06", "1978-12" | 
| Year, month and day with dashes | y"-"mm"-"dd | "2008-6-30", "78-12-22", "8-6-21" | 
| Day, month and four digit year, with dots, tabs or dashes | dd[.\t-]mm[.-]YY | "30-6-2008", "22.12.1978" | 
| Day, month and two digit year, with dots or tabs | dd[.\t]mm"."yy | "30.6.08", "22\t12.78" | 
| Day, textual month and year | dd([ \t.-])*m([ \t.-])*y | "30-June 2008", "22DEC78", "14 III 1879" | 
| Textual month and four digit year (Day reset to 1) | m([ \t.-])*YY | "June 2008", "DEC1978", "March 1879" | 
| Four digit year and textual month (Day reset to 1) | YY([ \t.-])*m | "2008 June", "1978-XII", "1879.MArCH" | 
| Textual month, day and year | m([ .\t-])*dd[,.stndrh\t ]+y | "July 1st, 2008", "April 17, 1790", "May.9,78" | 
| Textual month and day | m([ .\t-])*dd[,.stndrh\t ]* | "July 1st,", "Apr 17", "May.9" | 
| Day and textual month | dd([ .\t-])*m | "1 July", "17 Apr", "9.May" | 
| Month abbreviation, day and year | M"-"DD"-"y | "May-09-78", "Apr-17-1790" | 
| Year, month abbreviation and day | y"-"M"-"DD | "78-Dec-22", "1814-MAY-17" | 
| Year (and just the year) | YY | "1978", "2008" | 
| Year (expanded, 5-19 digits with sign) | [+-] YYY | "-81120", "+20192" | 
| Textual month (and just the month) | m | "March", "jun", "DEC" | 
| Description | Format | Examples | 
|---|---|---|
| Eight digit year, month and day | YYMMDD | "15810726", "19780417", "18140517" | 
| Four digit year, month and day with slashes | YY"/"MM"/"DD | "2008/06/30", "1978/12/22" | 
| Two digit year, month and day with dashes | yy"-"MM"-"DD | "08-06-30", "78-12-22" | 
| Four digit year with optional sign, month and day | [+-]? YY"-"MM"-"DD | "-0002-07-26", "+1978-04-17", "1814-05-17" | 
| Five+ digit year with required sign, month and day | [+-] YYY"-"MM"-"DD | "-81120-02-26", "+20192-04-17" | 
注意:
For the
yandyyformats, years below 100 are handled in a special way when theyoryysymbol is used. If the year falls in the range 0 (inclusive) to 69 (inclusive), 2000 is added. If the year falls in the range 70 (inclusive) to 99 (inclusive) then 1900 is added. This means that "00-01-01" is interpreted as "2000-01-01".
注意:
The "Day, month and two digit year, with dots or tabs" format (
dd[.\t]mm"."yy) only works for the year values 61 (inclusive) to 99 (inclusive) - outside those years the time format "HH[.:]MM[.:]SS" has precedence.
注意:
The "Year (and just the year)" format only works if a time string has already been found -- otherwise this format is recognised as
HHMM.
    It is possible to over- and underflow the dd and
    DD format. Day 0 means the last day of previous
    month, whereas overflows count into the next month. This makes
    "2008-08-00" equivalent to "2008-07-31" and "2008-06-31" equivalent
    to "2008-07-01" (June only has 30 days).
   
Note that the day range is restricted to 0-31 as indicated by the regular expression above. Thus "2008-06-32" is not a valid date string, for instance.
    It is also possible to underflow the mm and
    MM formats with the value 0. A month value of
    0 means December of the previous year. As example "2008-00-22" is
    equivalent to "2007-12-22".
   
If you combine the previous two facts and underflow both the day and the month, the following happens: "2008-00-00" first gets converted to "2007-12-00" which then gets converted to "2007-11-30". This also happens with the string "0000-00-00", which gets transformed into "-0001-11-30" (the year -1 in the ISO 8601 calendar, which is 2 BC in the proleptic Gregorian calendar).
