0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PHP】Carbon使用する時に気をつけること

Posted at

はじめに

Carbon使用する時に気をつけたいと思ったのでメモです。

SubMonthsメソッド

  • 1ヶ月前を取得を検索するとだいたいsubMonth()メソッドが結果としてよく出ているが、月末になると日付がずれてしまうので注意が必要。
$date = new Carbon('20241031')->subMonth(1);
echo($date);
  • 結果は2024-10-01 00:00:00になり、期待している2024-09-30 00:00:00にはならない。CarbonはDateTimeのラッパーとして、存在しない日付に対して適切に調整してくれるらしい。この場合は9月31日は存在しないので、10月1日に調整してくれているみたい。

subMonthsNoOverflowメソッド

  • 上記のようにならないためにsubMonthsNoOverflowを使用すると良いみたい。
$date = new Carbon('2024-10-31')->subMonthsNoOverflow(1);
echo $date;
  • 期待通り2024-09-30 00:00:00が表示される。

addMonthメソッド

  • 1ヶ月後も同様になる。11月31日は存在しないので2024-12-01 00:00:00になる。

addMonthsNoOverflowメソッド

  • 期待通り2024-11-30 00:00:00が表示される。

まとめ

月末・閏年など、このあたりテストの観点として抜けがちだったので、注意しようと改めて思いました。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?