PHPで日付のフォーマット(フォーマットの変換)をする方法

シェアする

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関数で使用する日付のフォーマットには下記の様なものがあります。上記のプログラムの例で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関数を使用し、日付のフォーマットを変換する事には問題もあります。それは、下記の様な問題です。

32bitのPHPを使用している場合、2038年 1月 19日 火曜日 3時14分08秒以降の時間が表示できない

という問題です。この問題を2038年問題といいます。
この問題は、64bitのPHPを使用すること(2922億7702万4641年まで)で回避できますが、32bitのPHPを使用しdate関数を使用する場合は、覚えておいてください。
=>「2038年問題」を華麗に解決!~エンジニアの仕事~

この2038年問題は、次に紹介するDateTimeクラスでフォーマットをすることでも解決することができます。PHP5.2からサポートされたので、PHP5.2以上を使用している場合は、こちらを使用してフォーマットするのも一つの手です。

DateTimeクラスで日付をフォーマット

日付をフォーマットし変換するのにdate関数を使用する以外にDateTimeクラスを使用する方法もあります。
DateTimeクラスを使用し、日付をフォーマットする場合は、DateTimeのformatメソッドを使用します。

string DateTime::format (string $フォーマット)
引数 上記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には、日付時刻関係の有名なライブラリが、あります。
日付のフォーマットの変換などについても直感的に行えます。

興味のある方は、下記の記事を参照ください。

PHPで日付関連の処理をするのに便利なCarbonの使用方法について紹介しています。CarbonはGitHubでも多数のスターの付く人気の日付関連のライブラリーです。
PHPの日付・時刻ライブラリChronosの機能について紹介しています。Carbonとの違いについても説明しています。