PHPで日付や時刻をフォーマットする(1月1日、1/1など)

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

PHPの日付や時間を「○年○月○日」や「○-○-○」など所定のフォーマットで出力する方法です。

date()によるフォーマットの方法と、フォーマット一覧表をご紹介します。

曜日の表示などにも触れています。

 

date関数でフォーマットする

今日が「2016/01/25」だったとします。

日付をフォーマット

2016年01月25日

今日の日付を「○年○月○日」形式にフォーマットして表示させました。

日時をフォーマット

2016年01月25日 20時22分53秒

今日の日付と時間をフォーマットして表示させました。

date関数の構文

date(フォーマット形式 [, タイムスタンプ]([ ]は省略可));

上記サンプルだとフォーマット形式のみの指定で、第二引数のタイムスタンプは指定されていません。

タイムスタンプは省略可能で、省略するとtime()つまり現在の日付を自動で取得してくれます。

フォーマット形式にはYmといったアルファベットが並んでいますが、これがフォーマット文字列です。

このフォーマット文字列には様々な種類があります。

date関数のフォーマット文字列一覧

以下のように、曜日や月の英語表記などフォーマットもいろいろと用意されています。
よく使われるフォーマットは以下の表を参考にしてください。

項目フォーマット説明サンプル
Y西暦(4桁)2015
y西暦(2桁)15
Lうるう年→1、普通の年→00
m月(2桁)07
n月(先頭の0なし)7
M英語(略語)jul
F英語july
d日(2桁)09
j日(先頭の0なし)9
tその月の日数31
zその年の経過日数121
曜日・週D英語(略語)Tue
l英語Tuesday
w曜日
(日曜0→土6)
2
Wその年の経過週
(月曜開始)
28
時間H24時間単位09
G24時間単位
(先頭の0なし)
9
h12時間単位09
g12時間単位
(先頭の0なし)
9
a午前/午後(小文字)am
A午前/午後(大文字)AM
i分(2桁)09
s秒(2桁)09

strtotime関数で所定の日付をフォーマットする

date()で日付を指定してフォーマットする場合は、第二引数にタイムスタンプを指定します。

整数型intのUnixタイムスタンプしか指定できないため、日付をstrtotime()などでタイムスタンプに変換する必要があります。

2015年12月31日

変数$dateに日付を格納し、それをdate()の第二引数に指定しますが、その際にstrtotime()でUnixタイムスタンプに変換してやります。

strtotime関数でUnixタイムスタンプに変換

ここで、date()の第二引数に指定するタイムスタンプをstrtotime()で出力してみましょう。

1451487600

10桁の数字が表示されましたが、date()は上記のようなタイムスタンプじゃないと受け付けません。

Unixタイムスタンプとは、協定世界時(UTC)での1970年1月1日午前0時0分0秒からの形式的な経過秒数

strtotime関数の構文

strtotime()は英文形式の日時をUnixタイムスタンプに変換してくれます。

日付の差分を計算したり、1週間後の日付を取得したりと日付の計算の時によく使われますね。

strtotime(‘日付’);

成功時→ タイムスタンプを返す
失敗時→ FALSEを返す

返されるタイムスタンプは整数型intですが、指定する日付は文字列型になります。

2015-12-31のような形式以外にも、Septemberなどの英語の日付表記でも指定できます。

strtotime関数の問題

date()strtotime()を使った日付のフォーマットはよく見かけますが、問題もあります。

 

  • 一部環境で2038年1/19以降動作しなくなってしまう(2038年問題)

Unixタイムスタンプを扱うといろいろと問題が出てくるようですね。

次にご紹介するDateTimeクラスだと、そのあたりもクリアされているようです。

PHPのマニュアルでも、日付同士の計算等はDateTimeクラスを使用するよう推奨されています。

DateTimeクラスでフォーマット

先ほどのdate()strtotime()でフォーマットするやり方の他に、DateTimeクラスでフォーマットする方法もあります。

PHP5.2からサポートされました。

クラスというとオブジェクト指向となるため、敷居が高いイメージがありますが、今回は日付のフォーマットだけを見ていきます。

意外と難しくないですよ。

日付をフォーマット

2016-01-25

説明

$day = new DateTime(‘日時(省略したら今の時点での日時)’);

  • まずnew DateTime();DateTimeオブジェクトを作る
  • そしてそのオブジェクトを変数$dayに格納

$day->format(‘Y-m-d’);

  • 変数$dayformatで指定した書式で表示させる

参考:PHPのアロー演算子(->)をできるだけ分かりやすく

変数$dayはオブジェクト型で、日時やタイムゾーンが格納されています。

そこから日時を->formatで引っ張りだして、Y-m-dの書式でフォーマットしてあげているんですね。

所定の日時をフォーマット

DateTimeクラスも、所定の日付や時間をフォーマットしてくれます。

2015年12月31日 23時59分59秒

new DateTime()のカッコの中に日時を指定するだけで、指定した日時で表示させることができました。

これなら2038年問題も起きないため、PHP5.2以上ならDateTimeクラスを採用したいですね。

様々なフォーマットでの表示例

上記のフォーマット一覧表から、いろいろなフォーマットで日時を表示させてみましょう。

date関数で表示

DateTimeクラスで表示

曜日を日本語で表示

曜日の日本語表記は用意されていませんが、一工夫して日本語の曜日を表示させてみましょう。

上記のフォーマット一覧表にもありますが、('w')で曜日を数字で取得します。

 

  • 日曜0 → 土曜6

これを応用して、以下のように曜日を日本語表記させました。

 

  1. 変数$weekに日〜土の値を順番に格納した配列を用意する
  2. 変数$wに今日の曜日の番号を格納する(月曜は1
  3. 変数$weekは0から始まるキーが連番で振られているので、$week[$w]とすると$week[1]と同等となる
  4. $weekの[1]は月曜なので、と表示される

他にもいろいろなフォーマットがあるので、日付のフォーマット方法を使いこなしていきましょう。

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメント

  1. jawic_kinoshita より:

    月のフォーマットのMとFの説明が逆では?

    1. flatFlag より:

      確かに逆になってますね。
      修正させていただきます。
      ご指摘誠にありがとうございます。

コメントを残す

*