経過日数の取得方法とデータ型の話

概要

phpでのアプリ開発中に、ある起算日からの経過日数・経過年数を求める必要がありました。

そもそもやり方を知らなかったのと、データの型に気をつけないとエラー地獄になってしまうので、備忘録として残しておきます。

diff関数

ある日付からの経過日数・経過年数を返す関数。

$date1->diff($date2)で、$date1から$date2までの経過日数や年数を取得可能。

戻り値の形式はformatの指定にて行う。

$date->diff($date2)->format("%y%m%d);// 経過時間を"~年~ヶ月~日"の形式で取得

$date->diff($date2)->format("%a);// 経過時間を累計日数の形式で取得

 

注意点

上記例で用いた$date1, $date2は共にDatetime型である必要があります。

手元にある変数がstring型の場合には、Datetimeオブジェクトに変換してあげる必要があります。

日付がらみの関数と、そのデータ型については以下詳細。

date関数

関数を呼び出した瞬間の日時を、引数として与えたフォーマットに基づいて返す関数。

戻り値は、String型

例)

$now = date("Y-m-d H:i:s");

// 結果:"2021-09-15 14:48:30"
// フォーマットの特殊文字については省略可能。月と日付以外が不要であれば、date("m/d")などとしても良い。

strtotime関数

引数として与えた文字列をint型で返す(timestamp表現?)。

引数は"last Sunday"などの相対的な表現でも可能。
その場合には、現在を基準として日付を計算する。

例)

$lastSunday = strtotime("last Sunday");

Datetimeオブジェクト

引数として与えた文字列から、Datetimeオブジェクトを生成する。

例)

$today = new Datetime(date("Y-m-d"));

まとめ

  • date関数はstringの生成(もしくはint > stringの変換)、Datetimeオブジェクトはstring > datetimeの変換
  • 手元にある変数がdatetime型でない場合は、Datetimeやdateで変換する必要あり。