【PHP入門】日付のフォーマット(format) | date・DateTimeなど

PHPにはdate関数やDateTimeクラスを使用して日付をさまざまなフォーマットに変換することができます。

この記事では、

・date関数で日付をフォーマットする方法
・DateTimeクラスのformatメソッドを使用して日付をフォーマットする方法
・指定した日時でフォーマットする方法(strtotime)

という基本的な内容から、

・日時をチェックする方法(strptime,checkdate)
・曜日を取得する方法

などの応用的な使い方に関しても解説していきます。

今回はdate関数やDateTimeクラスで日付をフォーマットする方法について、わかりやすく解説します!

目次

date関数でフォーマット

ここではdate関数を使用して日付をフォーマットする方法を紹介します。

date関数とは

date関数はローカルの日付や時刻を書式化する関数で、日付を扱う処理でよく使用されます。

date関数で日付のフォーマットを指定する場合は、以下のように記述します。

書き方:

string date(フォーマット文字 [, タイムスタンプ])

引数:
第一引数のフォーマット文字には文字列型日付のフォーマットを指定します。

第二引数にはUnixタイムスタンプを使用します。
(Unixタイムスタンプとは、 1970 年 1 月 1 日 00:00:00 UTC からの経過秒数を指します)

Unixタイムスタンプを省略した場合は現在の時刻が取得できます。

指定できるフォーマット文字(主に生年月日時分秒):
Y:年(西暦の4桁)・・・例)2017
y:年(西暦の2桁)・・・例)17
M:月(2桁の月)・・・例)08
n:月(1桁で先頭に0を付けいない)・・・例)8
d:日(2桁の日付)・・・例)21
H:時間(2桁の24時間単位)・・・例)16
h:時間(2桁の12時間単位)・・・例)08
i:分(2桁の分)・・・例)20
s:秒(2桁の秒)・・・例)30
t:指定した月の日数(28~31)・・・例)31
w:曜日(0:日 ~ 6:土)・・・例)2(火)
l:曜日(Sunday〜Saturday)

返り値:
書式化された日付文字列を返します。
第二引数のタイムスタンプは数字以外が指定された場合はFALSEを返し、ワーニングエラーが発生します。

日付・日時をフォーマットする

以下にdate関数を使用して、日付や日時のフォーマット指定する簡単なサンプルプログラムを紹介します。

サンプルプログラム1

//日付をフォーマットする
echo date('Y年m月d日').'<br>';

//日時をフォーマットする
echo date('Y年m月d日 H時i分s秒');

実行結果:

2017年10月23日
2017年10月23日 09時24分32秒

サンプルプログラムでは年月日を指定するためのy・m・dや時刻を指定するH・i・sを引数に指定しています。

date関数の第二引数であるタイムスタンプは指定していないため、ここでは現在の日時が出力されます。

また、以下のように曜日を取得することも可能です。

サンプルプログラム2

//本日の曜日を取得する
echo 'Today is '. date('l').'<br>';

//2015年10月1日の曜日を取得する
echo 'The day of the week on October 1, 2015 is '.
date('l', mktime(0, 0, 0, 10, 1, 2015));

実行結果:

Today is Monday
The day of the week on October 1, 2015 is Thursday

日付・日時をミリ秒単位でフォーマットする

日付をミリ秒単位で取得するためには、micortime関数を使用します。

書き方:

micortime (bool)

引数:
TRUEを指定すると、floatの値を返します。

返り値:
現在のUnixタイムスタンプをマイクロ秒単位まで返します。

サンプルプログラム

//日時とミリ秒で分割
$mtime = explode('.', microtime(true));

//date関数で指定したフォーマットに変換
echo date('Y/m/d H:i:s', $mtime[0]);
echo '<br>';

//日時とミリ秒を指定
echo date('Y/m/d H:i:s', $mtime[0]) . '.' .$mtime[1];

実行結果:

2017/09/03 02:12:33
2017/09/03 02:12:33.77

microtime関数を使用すれば、このようにミリ秒単位で日時が取得できることがわかりますね!

DateTimeクラスでフォーマット

ここではDateTimeクラスを使用して日付をフォーマットする方法を紹介します。

DateTimeクラスとは

日付や時刻を指定した書式でフォーマットして取得したい場合は、DataTimeクラスを使用する方法もあります。

DateTimeクラスは日付をオブジェクトとして扱うクラスです。

日付をフォーマットするにはDateTimeクラスのオブジェクトに対してformatメソッドを指定します。

書き方:

public string DateTime::format ( string $フォーマット)

引数:
$フォーマットには日付の書式を指定します。

日付・日時をフォーマットする

以下にDataTimeクラスのformatメソッドを使用して、現在の日時でフォーマットする方法を紹介します。

サンプルプログラム1

//現在の日時を指定する
$date = new DateTime();

//指定した書式で日時を取得する
echo $date->format('Y-m-d H:i:s');

実行結果:

2017-10-23 18:45:26

DateTimeクラスのインスタンス生成時に引数を指定しないと、現在の日時を取得したオブジェクトを作成します。

作成したDatetimeクラスのオブジェクトに対してformatメソッドを使用し、引数に日時のフォーマットを指定することで、フォーマットされた日時を取得できます。

日付を指定してフォーマットしたい場合は、以下のように記述します。

サンプルプログラム2

//現在の日時を指定する
$date = new DateTime('2015-10-01');

//指定した書式で日時を取得する
echo $date->format('Y-m-d H:i:s');

実行結果:

2015-10-01 00:00:00

DateTime関数の詳しい使い方や、date_format関数を使用したフォーマット設定方法については、以下の記事で詳しく解説しています!


【PHP入門】date_formatの使い方
更新日:2024年3月1日

strtotime関数で指定した日時でフォーマット

strtotime関数とは

指定した日時でフォーマットするには、date関数の第二引数にstrtotime関数を使用して、日付文字列をUnixタイムスタンプに変換します。

書き方:

strtotime(Unixタイムスタンプ)

引数:
日付/日時の文字列

返り値:
処理が成功するとUnixタイムスタンプを返し、失敗するとFALSEを返します。

strtotime関数の使い方

以下にdate関数で引数に日付文字列を指定して、日時に変更する方法を記述します。

サンプルプログラム

$date = '2017-04-01 00:00:00';
echo date('Y年m月d日', strtotime($date));
echo '<br>';
echo date('Y年m月d日 H時i分s秒', strtotime($date));

実行結果:

2017年04月01日
2017年04月01日 00時00分00秒

サンプルプログラムでは文字列型の日付を設定し、strtotime関数でUnixタイムスタンプ(1970年からの通算秒)に変換した値を、date関数で指定したフォーマットで日付を設定しています。

strtotime関数の使い方については、以下の記事でも詳しく解説していますので、ぜひ参考にしてください!

日時をチェックする方法

ここでは、strptime関数とcheckdate関数を使用した日付のチェック方法を紹介します。

strptime関数

指定した日付の形式が正しいかチェックするには、strptime関数を使用します。

書き方:

array strptime($日付文字列, フォーマット)

引数:
第一引数には文字列型日付を指定します。
第二引数にはdate関数で使用されているフォーマットを指定します。

返り値:
成功した場合は配列を返し、失敗した場合はFALSEを返します。

サンプルプログラム

$date = '2017-04-01';
 
//strptime関数で指定した日付の形式をチェックする
if(strptime($date, '%Y-%m-%d')){
  echo '正しい形式です';
}else{
  echo '不正な形式です';
}

実行結果:

正しい形式です

checkdate関数

指定した日付が正しいかチェックするには、checkdate関数を使用します。

書き方:

bool checkdate(月, 日, 年)

引数:
第一引数に月、第二引数に日、第三引数に年を指定します。

返り値:
指定した日付が有効な場合はTRUE、違う場合はFALSEを返します。

サンプルプログラム

$date = '2017-04-01';
 
//checkdate関数で指定した日付がただし以下チェックする
if(checkdate(4, 1, 2017)){
  echo '正しい日付です';
}else{
  echo '存在しない日付です';
}

実行結果:

正しい日付です

曜日を取得する方法

date関数の引数に’w’を指定すれば曜日番号を取得することが可能です。

以下のように記述すれば、本日の日付から曜日番号が取得できます。

サンプルプログラム

$date = date('w');
echo $date;

実行結果:

1

曜日を日本語に変換する方法については、以下の記事で詳しく解説しています!

date関数についてもっと詳しく知りたい方へ

date関数のさまざまな使い方については、以下の記事でもまとめていますので、ぜひ参考にしてくださいね!

ここで紹介したフォーマットや曜日を取得する以外でも、タイムゾーンの指定方法日付を比較する方法についても解説しています。

まとめ

ここではdate関数やDateTimeクラスを使用して、

・date関数で日付をフォーマットする方法
・DateTimeクラスのformatメソッドを使用して日付をフォーマットする方法
・指定した日時でフォーマットする方法(strtotime)
・日時をチェックする方法(strptime, checkdate)
・曜日を取得する方法

などのさまざまなフォーマット指定の方法やチェック、曜日の取得方法について解説しました。

PHPに限らず、システム開発において日付のデータは作業履歴やログ・ファイル出力時など、さまざまな処理で使われる非常に重要な情報となります。

もし、date関数の使用方法を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次