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日です
Memo:日数の出力系のフォーマットが書かれている
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関数を使った書き方は「手続き型」という違いがあるんだけど、クラスを使うのが「オブジェクト型」でクラスを使わないのが「手続き型」ということかな?
判断基準としては、小規模なら手続き型で大規模ならオブジェクト型使ったほうがいいみたい
そんなん考えたことなかった…
Memo:関数型ってのもあるみたいね
pythonだけど後で目を通したい
pythonだけど後で目を通したい
補足、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日」を返している