PHPで日付のフォーマット(形式)を変換することがあると思います。今回の記事ではPHPでの日付をフォーマットについて紹介します。
今回は、日付のフォーマットする方法はdate関数とDateTimeクラスを使用し、日付のフォーマットを変更する方法について紹介します。
date関数での日付のフォーマット
date関数とは?
date関数は、指定した書式でフォーマットした日付を返す関数です。
string date(フォーマット文字 [, タイムスタンプ])
第一引数 文字列型の日付のフォーマットを指定します。
第二引数 Unixタイムスタンプを指定します(省略可)。
Unixタイムスタンプとは?
date関数で日付のフォーマットをするためには、Unixタイムスタンプを使用します。
Unixタイムスタンプとは、コンピューターシステム上での時刻表現の一種でUNIXエポック、すなわち協定世界時 (UTC) での1970年1月1日午前0時0分0秒から形式的な経過秒数のことを言います。
date関数を使用した日付のフォーマットの例
PHPプログラム例①
$date = '2018-08-08 00:00:00'; echo date('Y/m/d', strtotime($date));
出力結果
2018/08/08
PHPプログラム例②
$date = '2018-08-08 00:00:00'; echo date('Y年m月d日 H時i分s秒', strtotime($date));
出力結果
2018年08月08日 00時00分00秒
strtotime()関数は、英語の書式での日付を含む文字列が指定されることを期待しており、 引数で与えられたその形式から Unixタイムスタンプ (1970年1月1日 00:00:00 UTC からの経過秒数) への変換する関数です。成功時は、タイムスタンプを返し、失敗時はfalseを返します。
上記の例では、$dateに代入されている日付をUnixタイムスタンプへ変換し、その値を指定された日付のフォーマットに変換しています。
date関数で使用する日付のフォーマットについて
date関数で使用する日付のフォーマットには下記の様なものがあります。date関数で使用する日付のフォーマットには下記の様なものがあります。上記のプログラムの例でHやらmやらdと記載しているものです。
項目 | フォーマット | 説明 | サンプル |
---|---|---|---|
年 | Y | 西暦(4桁) | 2018 |
y | 西暦(下2桁) | 18 | |
L | うるう年→1、普通の年→0 | 0 | |
o | ISO-8601 形式の週番号による年。 | 2018 | |
月 | m | 月(2桁) | 04 |
n | 月(先頭の0なし) | 4 | |
M | 英語3文字(略語) | Dec | |
F | 英語フルスペル | January | |
日 | d | 日(2桁) | 01 |
j | 日(先頭の0なし) | 9 | |
t | 指定した月の日数 | 31 | |
z | その年の経過日数 | 117 | |
曜日・週 | D | 英語3文字(略語) | Mon |
l | 英語フルスペル | Monday | |
w | 曜日 (日曜0→土6の0〜6の数値) |
6 | |
W | その年の経過週 ISO-8601 月曜日に始まる年単位の週番号 |
42(年の第42週目) | |
時間 | H | 24時間単位 | 09 |
G | 24時間単位 (先頭の0なし) |
8 | |
h | 12時間単位 | 09 | |
g | 12時間単位 (先頭の0なし) |
8 | |
a | 午前/午後(小文字) | am | |
A | 午前/午後(大文字) | AM | |
分 | i | 分(2桁:先頭に0をつける) | 09 |
秒 | s | 秒(2桁:先頭に0をつける) | 09 |
日付のフォーマットをするパラメータには、まだ他のものもあります。
必要なものが見つからない場合は、PHPマニュアル(日付・時刻 関数)を参照してください。
date関数とstrtotime関数を使用する上での問題点
しかし、このdate()関数とstrtotime関数を使用し、日付のフォーマットを変換する事には問題もあります。それは、下記の様な問題です。
という問題です。この問題を2038年問題といいます。
この問題は、64bitのPHPを使用すること(2922億7702万4641年まで)で回避できますが、32bitのPHPを使用しdate関数を使用する場合は、覚えておいてください。
=>「2038年問題」を華麗に解決!~エンジニアの仕事~
この2038年問題は、次に紹介するDateTimeクラスでフォーマットをすることでも解決することができます。PHP5.2からサポートされたので、PHP5.2以上を使用している場合は、こちらを使用してフォーマットするのも一つの手です。
DateTimeクラスで日付をフォーマット
日付をフォーマットし変換するのにdate関数を使用する以外にDateTimeクラスを使用する方法もあります。
DateTimeクラスを使用し、日付をフォーマットする場合は、DateTimeのformatメソッドを使用します。
引数 上記date関数で使用する日付のフォーマットで紹介したフォーマットを指定します。
DateTimeクラスを使用した日付のフォーマット例
PHPでのプログラム例
//現在の日時を指定する $date = new DateTime(); //指定した書式で日時を取得し画面表にする echo $date->format('Y-m-d H:i:s');
出力結果
2018-04-01 19:45:22
DateTimeクラスを使用した指定の日時を設定してフォーマットする例
PHPでのプログラム例
$day = new DateTime('2018-04-01 23:59:59'); echo $day->format('Y年m月d日 H時i分s秒');
出力結果
2018年04月01日 23時59分59秒
上記の例の様にnew DateTimeでインスタンスを作成する際に、日付を指定するとフォーマットを指定の日時のフォーマットを変換できる様になります。
PHPの日付時刻関連のライブラリ
PHPには、日付時刻関係の有名なライブラリが、あります。
日付のフォーマットの変換などについても直感的に行えます。
興味のある方は、下記の記事を参照ください。