PHPで日付を表示するには?どんなフォーマットなら出力可能?

こんにちは、Kyo ASAHINAです。

PHPで日付を画面に表示したいことってありますよね。

PHPで日付を表示

日付と一口に言っても、YYYY年M月D日みたいな形式もあれば、YYYY-MM-DDとかのハイフン区切り、YYYY/MM/DDみたいなスラッシュ区切りとかいろいろあります。

ただ、データベースとかファイルだとか、「元データ」が希望の形になってる場合はいいけど、そうじゃないときは困りますね。
例えば、元データが2018-05-17とかいう日付で、画面に表示しなければいけないのが2018年5月17日だったりとかです。

そんな時、便利な関数がdate()です。

使い方

下にあるプログラムのように使います。

<?php
$time = strtotime('2018-05-17');
echo date('Y年m月d日', $time);

これを実行した結果は、
2018年05月17日
になります。

このプログラムでは、まず「2018-05-17」という日付をタイムスタンプに置き換えます。
プログラム中の、strtotime()が日付をタイムスタンプに置き前ます。
タイムスタンプというのは何かというと、日付を「ある時点からの経過日数を秒で表したもの」です。
そして、タイムスタンプを$timeに入れます。
今度は、date()の第一引数に「Y年m月d日」を入れます。ここで形式を指定してるわけですね。
YがYearのY、mがmonthのm、そしてdがdayのdとなります。
そして先ほど得られた、タイムスタンプを第二引数に入れると、戻り値として、フォーマットされた形の日付が得られて、これを表示して終了です。

ただ、「『05月』になってるのを5月にしてほしい」とか注文があったら、どうしたらいいのでしょうか?
そんなときは、次のように書きましょう。

<?php
$time = strtotime('2018-05-17');
echo date('Y年n月d日', $time);

実行結果は、
2018年5月17日
になるのが、わかると思います。

何が違うんでしょうか?

m月の代わりにn月になってるんです。

つまり、mは月を01から12までの値で表示して、nは1から12までで表示するんですね。nを使うと一桁でも頭に0が付かないということです。

日付にしても、d日にしていますが、これをj日にすると、一桁でも頭に0が付かない形になります。

dは01から12で、jは1から12ということですね。

まとめ

いかがでしたか?

今日は、関数date()で日付を表現する方法を表現しました。

実はdate()を使うと、日付のみならず、時間だとか、曜日だとかいろいろな表現ができて面白いんです。

機会があればdate()でのほかの表現も紹介したいと思います。