web関連

【PHP】特定の日時から現在まで何日経過したか出力する方法

特定の日時から現在まで何日かかったのかどうか、日付の差分を求めたかったときの備忘録

現在の日時を取得して、特定の日時から日付の差分を求める方法

DateTimeクラスを使って取得します

現在の日時の取得方法

現在日時の取得方法と出力方法(メモ)

date_default_timezone_set('Asia/Tokyo');
$today = new DateTime('now');
echo $today->format('Y年m月d日 H時i分s秒');

タイムゾーンを先頭で指定しているけど、
DateTimeクラスでは引数に設定することもできる

$today = new DateTime('now', new DateTimeZone('Asia/Tokyo'));
echo $today->format('Y年m月d日 H時i分s秒');

タイムゾーン設定しておかないと9時間くらいずれる

※ DateTimeクラスはphp.iniでタイムゾーンを指定するか、date_default_timezone_set()関数でタイムゾーンを指定しなければエラーとなります。

DateTimeクラスのメソッドdiffを使って差分を求める

diffメソッドを使って特定の日時から現在までの総日数を求める

date_default_timezone_set('Asia/Tokyo');
$today = new DateTime('now');
$day = new DateTime('2017-11-12');
$diff = $day->diff($today);
echo $diff->format('ブログを初めて%d日です。');// ブログを初めて1042日です。

diffを使って日数の差分を出す時にフォーマットでaを使うことで総日数を出力できる

それか、

echo $diff->days;// 1042

とすることで数値のみ出力することもできる

フォーマットでdを使っていたら「7」って出てきちゃって調べたら「日」の差分だった
aを使うことで総日数を求めることができる

おまけ:strtotime()を使って差分を求める方法

DateTimeクラスを使う以外にstrtotime()を使って日付の差分を求めることもできるんだけどDateTimeを使うことが推奨されているみたい

一応メモがてらstrtotime()を使って、年始から今日まで何日経過しているか取得するコードを書いとく

date_default_timezone_set('Asia/Tokyo');
$today = date("Y-m-d");// 現在の日付け取得
$today = strtotime($today);// タイムスタンプへ変換
$day = strtotime('2020-01-01');
echo ($today - $day) / (60 * 60 * 24). '日';//262日(経過日数)

phpで日時を扱うときにstrtotimeを使ってタイムスタンプにする方法だと2038年問題って値がオーバーフローを起こして誤作動する可能性があるみたいだからDateTimeクラスを使っておいた方が良いみたい

Leave a Comment

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

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