【PHP】strtotime 関数を使うときの注意点
この記事は簡単シンプルなPHPカレンダーの作り方の補足記事です。
PHP の strtotime 関数を使えば、●日後、●週間前という日付を簡単に取得できます。
// 今日の2日後
date('Y-m-d', strtotime('+2 day'));
// 今日の1週間前
date('Y-m-d', strtotime('-1 week'));
// 2023年12月1日の1ヶ月前
date('Y-m-d', strtotime('2023-12-01 -1 month'));
とても便利な関数ですが、日付を使って●ヶ月前、●ヶ月後の年月を取得するときに注意が必要になることがあります。
この記事では「どんな場合に注意するべきかとその対処法」を紹介します。
strtotime 関数の注意点
1ヶ月前の年月を取得する場合
まずは2つの例を使って1ヶ月前の年月を出力してみましょう。
例① 基準日が12月1日の場合
echo date('Y-m', strtotime('2023-12-01 -1 month'));
// 出力結果:2023-11
例② 基準日が12月31日の場合
echo date('Y-m', strtotime('2023-12-31 -1 month'));
// 出力結果:2023-12 ← 11月にはなりません
1ヶ月後の年月を取得する場合
続いて1ヶ月後の年月も出力してみましょう。
例① 基準日が1月1日の場合
echo date('Y-m', strtotime('2024-01-01 +1 month'));
// 出力結果:2024-02
例② 基準日が1月31日の場合
echo date('Y-m', strtotime('2024-01-31 +1 month'));
// 出力結果:2024-03 ← 2月になりません
このように●ヶ月前、●ヶ月後の年月が予期した通りに取得できない可能性があります。
特に2月は「28日」「29日」があるので注意が必要になります。
正しい年月を取得する方法
正しい結果を得られるようにするには「基準日を1日にする」のがオススメです。
echo date('Y-m', strtotime('2023-12-01 -1 month'));
// 出力結果:2023-11
echo date('Y-m', strtotime('2024-01-01 +1 month'));
// 出力結果:2024-02
どちらも期待通りの年月が表示されていますね。
strtotime 関数はとても便利な関数ですが、基準となる日付にご注意ください!
具体的な使い方は簡単シンプルなPHPカレンダーの作り方でも紹介しています。