Railsでは日付を扱う際に、Date.today
、Date.current
、Date.tomorrow
、Date.yesterday
といったメソッドを使用できます。それぞれの違いを理解していないと、タイムゾーンの違いや意図しない挙動に悩まされることがあります。
この記事では、これらのメソッドの違いについてまとめます。
1. Date.today
Date.today
-
戻り値:
2025-02-04
(現在の日付) - 基準タイムゾーン: サーバーのシステムタイムゾーン
-
詳細:
- Rubyのメソッド。
-
Date.today
は、サーバーのシステム時刻を基に現在の日付を返します。 - Railsの
config.time_zone
の設定とは無関係であり、デフォルトのタイムゾーンを考慮しません。 - タイムゾーンの影響を受ける環境では、期待と異なる日付が返る可能性があります。
2. Date.current
Date.current
-
戻り値:
2025-02-04
(現在の日付) -
基準タイムゾーン: Railsの
config.time_zone
で設定されたアプリのタイムゾーン -
詳細:
-
Date.current
は、Railsアプリのタイムゾーン設定を考慮した上で現在の日付を取得します。 -
config.time_zone = 'Asia/Tokyo'
の場合、東京時間での今日の日付が取得されます。 - Railsアプリケーション内で使用する場合は、
Date.today
よりもDate.current
を使用する方が適切です。
-
3. Date.tomorrow
Date.tomorrow
-
戻り値:
2025-02-05
(明日の日付) -
基準タイムゾーン: Railsの
config.time_zone
の設定を考慮 -
詳細:
-
Date.tomorrow
は、Railsのタイムゾーン設定に基づき、現在の日付の翌日を取得します。 -
Date.current + 1.day
と同じ動作をします。
-
Date.current + 1.day == Date.tomorrow # => true
-
注意点:
-
Date.today + 1
とは異なり、Railsのタイムゾーンを考慮するため、アプリの設定に沿った正確な日付が得られます。
-
4. Date.yesterday
Date.yesterday
-
戻り値:
2025-02-03
(昨日の日付) -
基準タイムゾーン: Railsの
config.time_zone
の設定を考慮 -
詳細:
-
Date.yesterday
は、Railsのタイムゾーン設定を考慮し、現在の日付の前日を取得します。 -
Date.current - 1.day
と同じ動作をします。
-
Date.current - 1.day == Date.yesterday # => true
まとめ
メソッド | 戻り値の例 | タイムゾーンの考慮 | 備考 |
---|---|---|---|
Date.today |
2025-02-04 |
なし(システム依存) | システムのローカルタイムで今日の日付を取得 |
Date.current |
2025-02-04 |
あり(Railsの設定) | Railsのconfig.time_zone を考慮した今日の日付 |
Date.tomorrow |
2025-02-05 |
あり(Railsの設定) |
Date.current + 1.day と同じ |
Date.yesterday |
2025-02-03 |
あり(Railsの設定) |
Date.current - 1.day と同じ |
Railsアプリケーション内では、Date.today
の代わりにDate.current
を使うことで、Railsのタイムゾーン設定に沿った正しい日付を取得できます。
参考