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?

【Carbon】Carbon::now()->subMonth()の使用の罠にハマりそうだった件

Last updated at Posted at 2025-03-30

今日は2025年3月30日。
処理の中で前の月を取得したいと思い下記のコードを実装した。

Carbon::now()->subMonth()

で、うまく取得できているか確認しようと思いデバックしたところ、下記の表示が出た。

2025-03-02 09:43:23

あれ、おかしい。
自分が取得したいのは2月の日付である。


その後、何回実行しても3月の日付が取得されてしまう。。。
ここで少し詰まった。

確実に前の月の値を取得したいならfirstOfMonth()を使おう

どうやらsubMonth()の仕様だと1ヶ月前の日付を取得する為、例えば3月30日に実行すると2月30日が存在しないため3月に調整されることが発生する仕様とのこと。


なので、確実に前の月を取得するにはfirstOfMonth()メソッドを使ってその月の初日が始まった日付を取得することで、確実に前の月を取得するようにした方がよさそう。

// 修正コード
$lastMonthDate = Carbon::now()->firstOfMonth()->subMonth();
$year          = $lastMonthDate->year;
$month         = $lastMonthDate->month;

// ログで出した結果
[2025-03-30 09:37:32] local.DEBUG: 2025-02-01 00:00:00  
[2025-03-30 09:37:32] local.DEBUG: 2025  
[2025-03-30 09:37:32] local.DEBUG: 2
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?