経過日数の取得方法とデータ型の話
概要
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で変換する必要あり。