忍者ブログ

STEP UP BLOG

Home > ブログ > > [PR] Home > ブログ > php > PHPに日付処理における来月の挙動

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHPに日付処理における来月の挙動

このバグを直すためにはどうしたらよいかなーと検索をかけて、
出てきた検索結果一覧に既にアクセス済みのリンクがあったら凹みますよね…
あれ? 私昔も同じ間違いしてた??
全然学習してないじゃない…
そんな過去の失敗をまた繰り返すがっかり事案が今日もあったのでここで書かせていただきます。


PHPで来月を取得する必要があったのですが、そのときの処理をわかりやすく書き直したのが以下です。
$ php -r "echo date('m', strtotime('+1 month'));"
05

今日3月31日だよ? 来月4月だよ?
4月31日がないから5月1日になってしまうようです。
同様に1月や5月,8月,10月でも31日だと正しい来月が取得できません。
これは致命的ですよねと思いながらCarbonでも同じ処理を試してみたら、
$dt = new Carbon('next month');
echo $dt->format('m');  // 05

Carbonおまえもか…
PHPどうしようもないなと泣きながら調べて出てきた修正案は、
$dt = date('m', strtotime(date('Y-m-1').' +1 month'));
echo $dt;  // 04

$dt = new Carbon('first day of next month');
echo $dt->format('m');  // 04

$dt = new DateTime('first day of next month');
echo $dt->format('m');  // 04

"first day of"というのが肝要です。
日付処理は難しいですね…
PR

Comment0 Comment

Comment Form

  • お名前name
  • タイトルtitle
  • メールアドレスmail address
  • URLurl
  • コメントcomment
  • パスワードpassword

PAGE TOP