日付の書式

このページでは、 DateTimeImmutable, DateTime, date_create, date_create_immutable および strtotime のパーサーが理解する、 BNFライクな日付フォーマットを説明します。

DateTimeImmutableDateTime オブジェクトをフォーマットするには、 DateTimeInterface::format のドキュメントを参照ください。

シンボル一覧
シンボル 書式
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"
各国ごとの表記法
説明 書式
アメリカ式の月、日 mm "/" dd "5/12", "10/27"
アメリカ式の月、日、年 mm "/" dd "/" y "12/22/78", "1/17/2006", "1/17/6"
スラッシュで区切られた、4桁の年、月、日 YY "/" mm "/" dd "2008/6/30", "1978/12/22"
4桁の年、月 (GNU) YY "-" mm "2008-6", "2008-06", "1978-12"
ハイフンで区切られた、年、月、日 y "-" mm "-" dd "2008-6-30", "78-12-22", "8-6-21"
ドットかタブかハイフンで区切られた、日、月、4桁の年 dd [.\t-] mm [.-] YY "30-6-2008", "22.12.1978"
ドットかタブで区切られた、日、月、2桁の年 dd [.\t] mm "." yy "30.6.08", "22\t12.78"
日、月の文字表記、年 dd ([ \t.-])* m ([ \t.-])* y "30-June 2008", "22DEC78", "14 III 1879"
月の文字表記、4桁の年 (日は1日にリセットされる) m ([ \t.-])* YY "June 2008", "DEC1978", "March 1879"
4桁の年、月の文字表記 (日は1日にリセットされる) YY ([ \t.-])* m "2008 June", "1978-XII", "1879.MArCH"
月の文字表記、日、年 m ([ .\t-])* dd [,.stndrh\t ]+ y "July 1st, 2008", "April 17, 1790", "May.9,78"
月の文字表記、日 m ([ .\t-])* dd [,.stndrh\t ]* "July 1st,", "Apr 17", "May.9"
日、月の文字表記 dd ([ .\t-])* m "1 July", "17 Apr", "9.May"
月の省略形、日、年 M "-" DD "-" y "May-09-78", "Apr-17-1790"
年、月の省略形、日 y "-" M "-" DD "78-Dec-22", "1814-MAY-17"
年 (年だけの指定) YY "1978", "2008"
年 (拡張表記、5-19 桁。符号付き) [+-] YYY "-81120", "+20192"
月の文字表記 (月だけの指定) m "March", "jun", "DEC"
ISO 8601 に準拠した表記法
説明 書式
年、月、日の8桁 YY MM DD "15810726", "19780417", "18140517"
スラッシュで区切られた、4桁の年、月、日 YY "/" MM "/" DD "2008/06/30", "1978/12/22"
ハイフンで区切られた、2桁の年、月、日 yy "-" MM "-" DD "08-06-30", "78-12-22"
符号つきまたは符号なしの4桁の年、月、日 [+-]? YY "-" MM "-" DD "-0002-07-26", "+1978-04-17", "1814-05-17"
符号が必須。5桁の年、月、日 [+-] YYY "-" MM "-" DD "-81120-02-26", "+20192-04-17"

注意:

シンボル y または yy を含む書式について、 100未満の年は特別な扱いになります。年が0から69までの間だった場合、 2000を足した数になります。 また、年が70から99までの間だった場合、1900を足した数になります。 つまり、"00-01-01" は "2000-01-01" と解釈されます。

注意:

書式「ドットかタブで区切られた、日、月、2桁の年」 (dd [.\t] mm "." yy) は年が61から99の間のときだけ機能します。 この範囲外の年を与えた場合には 時刻の書式 の "HH [.:] MM [.:] SS" が優先されます。

注意:

書式「年 (年だけの指定)」は、時刻の指定が先に出現している場合のみ機能します。 そうでない場合、指定された4桁が HH MM にマッチした場合にこれらふたつの日付要素が代わりに設定されます。

年だけの指定を一貫してパースしたい場合は、 Y を指定して DateTimeImmutable::createFromFormat を使ってください。

警告

シンボル ddDD について、 オーバーフローやアンダーフローすることができます。 つまり、 0 日は先月の最終日の意味になりますし、 オーバーフローすると翌月に繰り越しになります。 このルールにより、"2008-08-00" は "2008-07-31" と同一になり、 "2008-06-31" は "2008-07-01" と同一になります ( 6 月は 30 日までしかないので)。

「日」の範囲が 0 から 31 までに絞られていることに注意しましょう。 先ほどの正規表現が示すとおりです。 したがって、たとえば "2008-06-32" は日付文字列として妥当な形式ではなくなります。

また、シンボル mmMM についても 0 を用いてアンダーフローすることができます。 0 月は前年の 12 月を意味します。 たとえば "2008-00-22" は "2007-12-22" と同一です。

もしこれらを併用し、日も月もアンダーフローした場合は次のようになります。 "2008-00-00" は、まず "2007-12-00" へと変換され、 さらに "2007-11-30" へと変換されます。 文字列 "0000-00-00" についても同様に "-0001-11-30" へと変形されます。 (ISO 8601 における -1 年は、予測的グレゴリオ暦 (proleptic Gregorian calendar) で言うところの紀元前 2 年になります。)