web関連

【PHP】時間の差分を求める方法

DateTimeクラスを使った方法とタイムスタンプを使った方法があったので備忘録

DateTimeクラスを使った差分の求め方

年始から年末まで何日あるか取得する方法

$newYear = new DateTime('2020-01-01');
$yearEnd = new DateTime('2020-12-31');
$diff = $newYear->diff($yearEnd);
echo $diff->days . '日';// 365日

これで求められる
総日数を求める場合はdaysを指定する必要がある
dを使うと日にちの差分を取得するので注意

echo $diff->d . '日';// 30日

また、文字列と一緒に出力することも出来る
formatメソッドを使って%aを使うことで文字列と一緒に総日数を取得できる

echo $diff->format('1年は%a日です');// 1年は365日です

date_create関数を使った差分の求め方

DateTimeクラスと同じDateTimeオブジェクトを返す関数でdate_create関数というものがあるみたいなので違いについて確認してみた

$newYear = date_create('2000-01-01');
$yearEnd = date_create('2000-12-31');
$diff = date_diff($yearEnd,$newYear);
echo $diff->days . '日';// 365日
echo $diff->format('1年は%a日です');// 1年は365日です

出力方法はDateTimeクラスと共通している
差分を取得する際にdate_diff関数を使ってるけど、
$newYear->diff($yearEnd);と書いても問題はない

違いとしてはDateTimeクラスを使った書き方は「オブジェクト型」で、date_create関数を使った書き方は「手続き型」という違いがあるんだけど、クラスを使うのが「オブジェクト型」でクラスを使わないのが「手続き型」ということかな?
判断基準としては、小規模なら手続き型で大規模ならオブジェクト型使ったほうがいいみたい
そんなん考えたことなかった…

補足、date_create関数はDateTime::__construct()のエイリアスって書いてあった

タイムスタンプで差分を求める方法

strtotime関数を使ってタイムスタンプの引き算で差分を求める

$newYear = strtotime('2020-01-01');
$yearEnd = strtotime('2020-12-31');
$diff = ($yearEnd - $newYear) / (60 * 60 * 24);
echo floor($diff) . '日';// 365日

今回は日付を取得したので「秒×分×時」を合わせた数値で、指定の日時の差分を除算(割り算)してfloor()で小数点以下を切り捨てしてる

簡単

date関数は時間を文字列として返すから差分を求めるには一度タイムスタンプにする必要性がある
だから今回の備忘録には載せてない

【注意】2020年はうるう年なので「366日」あるから差分で「365日」を返している

Leave a Comment

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。