[PHP] date関数で使えるフォーマットとは?

こんにちは。

date関数を使って日付の出力する際に、

date("Y-m-d")

のような書き方をすると思います。
このときの、”Y-m-d”のフォーマットってなんでも良いのでしょうか?
例えば、日付なのに、”Y:m:d”として”2019:01:01″のように出力しても良いでしょうか?

出力としては、問題ないです。
ただし、その値を後で再利用する可能性がある場合は、決まった書式を使用するべきです。

date関数では基本的に決まったフォーマットを使用したほうがいい

date関数でのフォーマットは、基本的に決まったフォーマットを使用したほうが良いです。
「基本的に」というのは、求めた日付を再利用等する可能性がある場合です。
「決まったフォーマット」は、ざっくり言うと、一般的に見るフォーマットです。

決まったフォーマットを使うべき理由

求めた日付を再利用等する場合に、決まったフォーマットを使用すべきと書きました。
それは、もし一般的でないフォーマットを使用した場合、求めた日付をstrtotime関数等で認識できなくなるためです。

具体的に、strtotime関数を使う場合を以下に挙げます。

$_20190101 = date("Y-m-d");
$_20190102 = date("Y-m-d", strtotime("+1 day", strtotime($_20190101)));

処理としては、”2019-01-01″ の 1日後を求めています。
1行目で、”2019-01-01″ が求まります。
2行目は、”2019-01-01″ のタイムスタンプを求め、それの1日後を求めます。そして、”Y-m-d” フォーマットで出力します。その結果、”2019-01-02″ が求まります。

処理の意味が分からない方は、以下の記事を参照してください。

ここで、date関数のフォーマットを普段使わないものにしてみます。

$_20190101 = date("Y~m~d", $date);
$_19700102 = date("Y-m-d", strtotime("+1 day", strtotime($_20190101)));

1行目で、”2019~01~01″ が求まります。
しかし、2行目の結果は、”1970-01-02″ になってしまいます。それは、strtotime(“2019~01~01”) を処理できないためです。
そのため、一度でも変なフォーマットに変換してしまうと、直すことも簡単にはできなくなってしまいます。

つまり、strtotimeが認識できない日付フォーマットは使用すべきではありません。

どんなフォーマットが使えるのか

では、どんなフォーマットなら良いのか、ということですが、
「一般的に目にするものなら大丈夫」です。
例えば、日付なら
” 2019-01-01 “
” 20190101 “
” 2019/01/01 “
等です。

良く使うフォーマットをまとめました。

全てのフォーマットは以下のサイトをご覧ください。

まとめ

date関数でフォーマットを指定するときは、一般的なフォーマットにしましょう。一般的なフォーマットでないと、後で処理するときに正しく処理ができなくなってしまいます。