date() メソッド

PHP では古くから date() メソッドを利用して日付を処理することもできます。date()引数には決められた文字フォーマットを入力して結果を取得します。

date('フォーマット')
  • date() は2038年問題で、2038年を超えると意図しない動作する可能性があります

UNIXタイムスタンプとは

UNIXタイムスタンプは、協定世界時(UTC)の規格で、1970年1月1日0時0分0秒からの経過時間を数値で表したもので、PHPでは単にタイムスタンプともいい、date() 第2引数に代入して日付指定することもできます。

date('フォーマット', タイムスタンプ)

PHPでは time() , strototime() , mktime() などで作成することができますが、のちほど説明します。

日付フォーマットを指定

日付フォーマットは「年月日」や「時間」を規定文字で指定します。

//4桁の年
date('Y');
//2桁の月
date('m');
//日
date('d');
//時
date('H');
//分
date('i');
//秒
date('s');

曜日(数値)

w日曜日 = 0 ではじまる曜日の数値を取得します。

date('w');

月の日数

tその月の日数を取得します。

date('t');

現在の日時を文字列で表示する

date() で現在の日時を「年月日」「時刻」で出力してみましょう。タイムゾーンは Asia/Tokyo で設定します。

date_default_timezone_set('Asia/Tokyo');
echo date('Y年m月d日 H:i:s') . PHP_EOL;

time() で現在のタイムスタンプを取得

time()現在のタイムスタンプを取得します。

time()

date() の第2引数には現在のタイムスタンプを代入して、日時を表示してみましょう。ちなみに time() は省略しても結果は同じです。

echo date('Y/m/d H:i:s', time());

strtotime() で文字列からタイムスタンプを取得

strtotime()文字列からタイムスタンプを取得します。

strtotime(日時の文字列)

文字列の指定はいろいろな記述ができます。date() で表示してみましょう。

日時指定

日時を文字列で指定してタイムスタンプを作成します。もう一度、date() に戻して確認してみましょう。

$time = strtotime('2020/01/01 08:30'); 
echo date('Y年m月d日 H:i:s', $time);
echo PHP_EOL;
//2020年01月01日 08:30

日時の前後指定

day, month, year などの日付英単語と数字で日時の前後を指定できます。数字の前に「+」「-」の符号をつけます。

//翌日
echo date('Y/m/d H:i:s', strtotime('+1day')) . PHP_EOL;
//3ヶ月前
echo date('Y/m/d H:i:s', strtotime('-3month')) . PHP_EOL;
//1年後
echo date('Y/m/d H:i:s', strtotime('+1year')) . PHP_EOL;
//2週間前
echo date('Y/m/d H:i:s', strtotime('-2week')) . PHP_EOL;

曜日を指定

次の曜日、前の曜日を指定します。(現在の日時によって当日を含みます)

//2週間後の月曜日
echo date('Y/m/d H:i:s', strtotime('+2 Monday')) . PHP_EOL;
//前の月曜日
echo date('Y/m/d H:i:s', strtotime('-1 Monday')) . PHP_EOL;

DateTimeクラス

date() や strtotime() は日付の範囲が1900 から 2038年までになっていて、それ以外の日付を扱うとエラーになる 2038年問題 を抱えています。そこでPHPでは DateTimeクラスが用意されており date() よりも機能が充実しています。DateTimeクラスを使うには new DateTime() でインスタンスを作成します。

$date = new DateTime();

new DateTime() で作成した日付オブジェクトをもとに、format() メソッドで日付や時間、曜日などを取得できます。

//4桁の年
$date->format('Y');
//2桁の月
$date->format('m');
//日
$date->format('d');
//時
$date->format('H');
//分
$date->format('i');
//秒
$date->format('s');
曜日(数値)

日曜日 = 0 ではじまる曜日の数値を取得します。

$date->format('w');

日時の表示

format() に日時フォーマットを指定して表示してみましょう。

echo $date->format('Y/m/d H:i:s');
echo PHP_EOL;

日付・日時の前後

modify()日時の前後を取得します。引数は strtotime() で指定した文字列と同様です。

//1日前
$date = new DateTime();
echo $date->modify('-1days')->format('Y-m-d H:i:s');
echo PHP_EOL;

//2ヶ月後
$date = new DateTime();
echo $date->modify('+2month')->format('Y-m-d H:i:s');
echo PHP_EOL;

日付の差分をとる

DateTimeクラスには差分を計算する diff() メソッドが用意されています。開始日と終了日のDateTimeインスタンスを使って比較します。

終了日インスタンス->diff(開始日インスタンス)

diff() を実行するとDateIntervalクラスのインスタンスを取得します。

開始日と終了日の差分(何日あるか)を計算してみましょう。

$start_date = new DateTime('2000/1/1');
$end_date = new DateTime();
$end_date->diff($start_date);

タイムゾーン

日付のタイムゾーン(地域)を取得します。

$timezone = $date->getTimezone();
echo $timezone->getName();
echo PHP_EOL;
結果

今日の日付・日時が表示されます。

2021-04-26 16:21:44

問題1

今日日付と曜日を表示してみましょう。

2021年04月27日(火)

問題2

2020年1月10日から2021年3月21日の日数を計算してください。

問題3

今月のカレンダーを一覧で作成してみましょう。

2021月7月

1日(木)

2日(金)

3日(土)

...

PHP超入門