はじめに
主に自分用に、PHPで日付を取る方法をまとめています。
特に、前月や次月の日付を取得したいという場合、取得に注意が必要なので、以下にまとめておきます。
念のたPHPのバージョン
PHP 7.3.29
日付の取得・加算・減算
主にstrtotimeを使用した取得の仕方をまとめます。
//現在の日付のtimestamp
strtotime("now")
//現在の日付をyyyy/MM/dd HH:mm:ssの形式で(デフォルトはUTC。変更したい場合はphp.iniのdate.timezoneを変更)
date('Y/m/d H:i:s', strtotime('now'));
//1年前・1年後
date('Y/m/d H:i:s', strtotime('-1 year'));
date('Y/m/d H:i:s', strtotime('+1 year'));
//1ヶ月前・1ヶ月後
date('Y/m/d H:i:s', strtotime('-1 month'));
date('Y/m/d H:i:s', strtotime('+1 month'));
//1日前・1日後
date('Y/m/d H:i:s', strtotime('-1 day'));
date('Y/m/d H:i:s', strtotime('+1 day'));
//1時間前・1時間後
date('Y/m/d H:i:s', strtotime('-1 hour'));
date('Y/m/d H:i:s', strtotime('+1 hour'));
//1分前・1分後
date('Y/m/d H:i:s', strtotime('-1 minute'));
date('Y/m/d H:i:s', strtotime('+1 minute'));
//1週間前・1週間後
date('Y/m/d H:i:s', strtotime('-1 week'));
date('Y/m/d H:i:s', strtotime('+1 week'));
特定の日付を取得
//今月の月初
date('Y/m/d H:i:s', strtotime('first day of this month'));
//今月の月末
date('Y/m/d H:i:s', strtotime('last day of this month'));
//指定月の月初(targetTimeはstring型で指定。yyyy-MMという形でもOK)
$targetTime = '2022-03-31 00:00:00';
date('Y/m/d H:i:s', strtotime('first day of'.$targetTime));
//指定月の月末
$targetTime = '2022-03-01 00:00:00';
date('Y/m/d H:i:s', strtotime('last day of'.$targetTime));
次月・前月の取得
次月を取得したいからといって、うっかり+1 monthを指定すると、月末とかにズレが発生する。
$targetTime = strtotime('2022-08-31 00:00:00');
echo date('Y/m/d H:i:s', strtotime('+1 month', $targetTime)); // 2022/10/01 00:00:00
echo date('Y/m/d H:i:s', strtotime('first day of next month', $targetTime)); // 2022/09/01 00:00:00
2022/8/31から+1ヶ月すると、2022/9/31になるが、9月に31日はないので、自動的に9/31→10/1と修正される。
前月も同様となる。
$targetTime = strtotime('2022-03-31 00:00:00');
echo date('Y/m/d H:i:s', strtotime('-1 month', $targetTime)); // 2022/03/03 00:00:00
echo date('Y/m/d H:i:s', strtotime('last day of last month', $targetTime)); // 2022/02/28 00:00:00
3/31から–1ヶ月は2/31だが、2月は28日までしかないので2/28→3/3となってしまう。