ホーム > PHPサンプル > 日付系 > PHP strtotime()/DateTimeクラス が理解できる【 日付/時刻のフォーマット文字列(書式)】
PHPサンプル

UPDATE:2019年06月12日

PHP strtotime()/DateTimeクラス が理解できる【 日付/時刻のフォーマット文字列(書式)】

PHP strtotime()/DateTimeクラス が理解できる【 日付/時刻のフォーマット文字列(書式)】 | wepicks!
PHP5 PHP7


日付/時刻フォーマット(書式)文字列

strtotime()関数DateTimeクラス が理解する 日付や時刻のフォーマット(書式)文字列の表記方法は数多くあります。通常以下のように「2020-01-02 03:04:05」など、分かり易い日付や時刻のフォーマット(書式)で指定する場合が殆どだと思います。

日付のフォーマット文字列の例

'2020-01-02'
'01/02/2020'
'Jan. 02, 2020'
'02 Jan 2020'

時刻のフォーマット文字列の例

'23:59:59'
'23.59.59'

日時のフォーマット文字列の例

'2020-01-02 03:04:05'

当然これらの一般的なフォーマット文字列の表記方法も理解可能です。

strtotime()関数 や DateTimeクラス はさらに多くの日付や時刻のフォーマット文字列を読み込むことが出来ます。それらのルールや書式を紹介します。

strtotime/DateTime 理解可能 日付のフォーマット文字列(書式)

strtotime() や DateTimeクラス が理解する 日付のフォーマット(書式)文字列の表記方法です。

シンボル一覧

シンボルは以下の「各国ごとの日付フォーマット(書式)の表記法」の書式の記号に照らし合わせて下さい。
シンボル書式
y
[0-9]{1,4}
※0~9 を使用した 1桁~4桁 の数値
"00", "78", "08", "8", "2008"
yy
[0-9]{2}
※0~9 を使用した 2桁 の数値
"00", "08", "78"
YY
[0-9]{4}
※0~9 を使用した 4桁 の数値
"2000", "2008", "1978"
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"
※上記内容の何れか
"january", "jan"
M
'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec'
※上記内容の何れか
 
mm
"0"? [0-9] | "1"[0-2]
※1桁:0~9、2桁:01~09 10 11 12
"0", "04", "7", "12"
MM
"0" [0-9] | "1"[0-2]
※2桁:00~09 10 11 12
"00", "04", "07", "12"
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"

各国ごとの日付フォーマット(書式)の表記法

書式の記号の内容は上記表のシンボルを確認下さい。 ※\t はスペースです。
書式説明
mm "/" ddアメリカ式の月、日"5/12", "10/27"
mm "/" dd "/" yアメリカ式の月、日、年"12/22/78", "1/17/2006", "1/17/6"
YY "/" mm "/" ddスラッシュで区切られた、4桁の年、月、日"2008/6/30", "1978/12/22"
YY "-" mm4桁の年、月 (GNU)"2008-6", "2008-06", "1978-12"
y "-" mm "-" ddハイフンで区切られた、年、月、日"2008-6-30", "78-12-22", "8-6-21"
dd [.\t-] mm [.-] YYドットかタブかハイフンで区切られた、日、月、4桁の年"30-6-2008", "22.12.1978"
dd [.\t] mm "." yyドットかタブで区切られた、日、月、2桁の年"30.6.08", "22\t12.78"
dd ([ \t.-])* m ([ \t.-])* y日、月の文字表記、年"30-June 2008", "22DEC78", "14 III 1879"
m ([ \t.-])* YY月の文字表記、4桁の年 (日は1日にリセットされる)"June 2008", "DEC1978", "March 1879"
YY ([ \t.-])* m4桁の年、月の文字表記 (日は1日にリセットされる)"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"
d ([ .\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"
m月の文字表記 (月だけの指定)"March", "jun", "DEC"

strtotime()で各国日付フォーマット文字列を扱う

実行日時 2019-06-11 16:59:15 の場合
<?php
echo date('Y-m-d H:i:s' ,strtotime('5/12'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('12/22/78'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('2008/6/30'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('2008-6'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('2008-6-30'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('30-6-2008'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('30.6.08'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('30-June 2008'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('June 2008'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('2008 June'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('July 1st, 2008'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('July 1st'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('May-09-78'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('78-Dec-22'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('1978'))."<br/>\n";
echo date('Y-m-d H:i:s' ,strtotime('March'))."<br/>\n";
?>
結果は
2019-05-12 00:00:00
1978-12-22 00:00:00
2008-06-30 00:00:00
2008-06-01 00:00:00
2008-06-30 00:00:00
2008-06-30 00:00:00
2008-06-30 00:00:00
2008-06-30 00:00:00
2008-06-01 00:00:00
2008-06-01 00:00:00
2008-07-01 00:00:00
2019-07-01 00:00:00
1978-05-09 00:00:00
1978-12-22 00:00:00
1978-06-11 16:59:15
2019-03-11 00:00:00
となります。

DateTimeクラスで各国日付フォーマット文字列を扱う

実行日時 2019-06-11 16:59:15 の場合
<?php
$objDateTime = new DateTime('5/12');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('12/22/78');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('2008/6/30');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('2008-6');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('2008-6-30');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('30-6-2008');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('30.6.08');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('30-June 2008');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('June 2008');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('2008 June');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('July 1st, 2008');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('July 1st');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('May-09-78');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('78-Dec-22');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('1978');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";

$objDateTime = new DateTime('March');
echo $objDateTime->format('Y-m-d H:i:s')."<br/>\n";
?>
結果は
2019-05-12 00:00:00
1978-12-22 00:00:00
2008-06-30 00:00:00
2008-06-01 00:00:00
2008-06-30 00:00:00
2008-06-30 00:00:00
2008-06-30 00:00:00
2008-06-30 00:00:00
2008-06-01 00:00:00
2008-06-01 00:00:00
2008-07-01 00:00:00
2019-07-01 00:00:00
1978-05-09 00:00:00
1978-12-22 00:00:00
1978-06-11 16:59:15
2019-03-11 00:00:00
となります。

ISO 8601 に準拠した日付フォーマット(書式)の表記法

書式説明
YY MM DD年、月、日の8桁"15810726", "19780417", "18140517"
YY "/" MM "/" DDスラッシュで区切られた、4桁の年、月、日"2008/06/30", "1978/12/22"
yy "-" MM "-" DDハイフンで区切られた、2桁の年、月、日"08-06-30", "78-12-22"
[+-]? YY "-" MM "-" DD符号つきまたは符号なしの4桁の年、月、日"-0002-07-26", "+1978-04-17", "1814-05-17"

strtotime/DateTime 理解可能 時刻のフォーマット文字列(書式)

strtotime() や DateTimeクラス が理解する 時刻のフォーマット(書式)文字列の表記方法です。

シンボル一覧

シンボル書式
frac. [0-9]+".21342", ".85"
hh"0"?[1-9] | "1"[0-2]"04", "7", "12"
HH[01][0-9] | "2"[0-4]"04", "07", "19"
meridian[AaPp] .? [Mm] .? [\0\t ]"A.m.", "pM", "am."
MM[0-5][0-9]"00", "12", "59"
II[0-5][0-9]"00", "12", "59"
space[ \t] 
tz"("? [A-Za-z]{1,6} ")"? | [A-Z][a-z]+([_/][A-Z][a-z]+)+"CEST", "Europe/Amsterdam", "America/Indiana/Knox"
tzcorrection"GMT"? [+-] hh ":"? MM?"+0400", "GMT-07:00", "-07:00"

12時間制の時刻フォーマット(書式)の表記

書式説明
hh space? meridian時、午前/午後"4 am", "5PM"
hh [.:] MM space? meridian時、分、午前/午後"4:08 am", "7:19P.M."
hh [.:] MM [.:] II space? meridian時、分、秒、午前/午後"4:08:37 am", "7:19:19P.M."
hh ":" MM ":" II [.:] [0-9]+ meridianMS SQL (時、分、秒、端数、午前/午後), PHP 5.3 以降で利用可能"4:08:39:12313am"

strtotimeで12時間制の時刻フォーマット文字列を扱う

<?php
echo date('H:i:s a' ,strtotime('4 am'))."<br/>\n";
echo date('H:i:s a' ,strtotime('4:08 am'))."<br/>\n";
echo date('H:i:s a' ,strtotime('4:08:37 am'))."<br/>\n";
echo date('H:i:s a' ,strtotime('4:08:39:12313am'))."<br/>\n";
?>
結果は
04:00:00 am
04:08:00 am
04:08:37 am
04:08:39 am
となります。

DateTimeクラスで12時間制の時刻フォーマット文字列を扱う

<?php
$objDateTime = new DateTime('4 am');
echo $objDateTime->format('H:i:s a')."<br/>\n";

$objDateTime = new DateTime('4:08 am');
echo $objDateTime->format('H:i:s a')."<br/>\n";

$objDateTime = new DateTime('4:08:37 am');
echo $objDateTime->format('H:i:s a')."<br/>\n";

$objDateTime = new DateTime('4:08:39:12313am');
echo $objDateTime->format('H:i:s a')."<br/>\n";
?>
結果は
04:00:00 am
04:08:00 am
04:08:37 am
04:08:39 am
となります。

24時間制の時刻フォーマット(書式)の表記

書式説明
't'? HH [.:] MM時、分"04:08", "19.19", "T23:43"
't'? HH MM時、分(コロンなし)"0408", "t1919", "T2343"
't'? HH [.:] MM [.:] II時、分、秒"04.08.37", "t19:19:19"
't'? HH MM II時、分、秒(コロンなし)"040837", "T191919"
't'? HH [.:] MM [.:] II space? ( tzcorrection | tz )時、分、秒、タイムゾーン"040837CEST", "T191919-0700"
't'? HH [.:] MM [.:] II frac時、分、秒、端数"04.08.37.81412", "19:19:19.532453"
tz | tzcorrectionタイムゾーン"CEST", "Europe/Amsterdam", "+0430", "GMT-06:00"

strtotimeで24時間制の時刻フォーマット文字列を扱う

<?php
echo date('H:i:s a' ,strtotime('04:08'))."<br/>\n";
echo date('H:i:s a' ,strtotime('0408'))."<br/>\n";
echo date('H:i:s a' ,strtotime('04.08.37'))."<br/>\n";
echo date('H:i:s a' ,strtotime('040837'))."<br/>\n";
echo date('H:i:s a' ,strtotime('040837CEST'))."<br/>\n";
echo date('H:i:s a' ,strtotime('04.08.37.81412'))."<br/>\n";
echo date('H:i:s a' ,strtotime('CEST'))."<br/>\n";
?>
結果は
04:08:00 am
04:08:00 am
04:08:37 am
04:08:37 am
11:08:37 am
04:08:37 am
01:34:10 am
となります。

DateTimeクラスで24時間制の時刻フォーマット文字列を扱う

<?php
$objDateTime = new DateTime('04:08');
echo $objDateTime->format('H:i:s a')."<br/>\n";

$objDateTime = new DateTime('0408');
echo $objDateTime->format('H:i:s a')."<br/>\n";

$objDateTime = new DateTime('04.08.37');
echo $objDateTime->format('H:i:s a')."<br/>\n";

$objDateTime = new DateTime('040837');
echo $objDateTime->format('H:i:s a')."<br/>\n";

$objDateTime = new DateTime('040837CEST');
echo $objDateTime->format('H:i:s a')."<br/>\n";

$objDateTime = new DateTime('04.08.37.81412');
echo $objDateTime->format('H:i:s a')."<br/>\n";

$objDateTime = new DateTime('CEST');
echo $objDateTime->format('H:i:s a')."<br/>\n";
?>
結果は
04:08:00 am
04:08:00 am
04:08:37 am
04:08:37 am
04:08:37 am
04:08:37 am
18:34:10 pm
となります。

タグ(=記事関連ワード)

日付

投稿日:2019年6月11日
最終更新日:2019年06月12日

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

https://wepicks.net/phpsample-date-strtotime_datetime_fmt/trackback/

page top