1
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?

【Rails初学者】「Date.today」と「Date.current」の違いを理解する

1
Posted at

背景

Railsで開発し始めたばかりの頃に、先輩から「Date.todayDate.currentの違いを理解して、使ってね」と教えられました。
しかし、教えてもらった当時はその違いはよくわかっていなかったです...😅
この記事では、Date.todayDate.currentの違いについて、初心者の方向けにわかりやすく解説します!✍️

date-current-today.png

Date.todayとは?

Date.todayは、Rubyの標準ライブラリで提供されているメソッドで、システムのローカルタイムゾーンに基づいて現在の日付を取得します!
つまり、サーバーのタイムゾーン設定に依存します。

特徴

  • Rubyの標準メソッド
  • サーバーのタイムゾーンを使用
  • Railsで設定したタイムゾーン(config.time_zone)は考慮されない

Date.currentとは?

Date.currentは、Railsが提供するメソッドで、Railsアプリケーションの設定に基づいて現在の日付を取得します!
具体的には、config.time_zoneで設定されたタイムゾーンを考慮します。

特徴

  • Rails独自のメソッド(ActiveSupportによって追加)
  • アプリケーションのタイムゾーン設定(config.time_zone)を使用
  • サーバーのタイムゾーンに依存しない

両者の違いまとめ

メソッド   基準にする時間 特徴
Date.today Ruby標準  サーバーのタイムゾーン Railsの設定は無視
Date.current Rails拡張 アプリケーションのタイムゾーン設定 config.time_zoneを考慮

Railsアプリケーションではどちらを使うべきか?

Railsアプリケーションでは、Date.currentを使用することが推奨されます!

具体例で説明します。
例えば、サーバーのタイムゾーンがUTCに設定されており、RailsアプリケーションのタイムゾーンがTokyo(JST)に設定されている場合を考えます。

# config/application.rb
config.time_zone = 'Tokyo'

アプリでは、「お正月キャンペーン」として年明けの1月1日から特別な処理を行いたいとします。
もしDate.todayを使用すると、サーバーのタイムゾーン(UTC)に基づいて日付が取得されるため、日本時間で1月1日になっていても、UTCではまだ12月31日のままです。
これにより、1月1日の年が変わった瞬間ではなく、1月1日の朝9時までキャンペーンが開始されないという問題が発生してしまいます😭

終わりに

この記事では、Date.todayDate.currentの違いについて解説しました!
Time.nowTime.currentの違いも同様の考え方が適用されるので、そちらもぜひ確認してみてください🙌
最後まで読んでいただき、ありがとうございました🍀

1
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
1
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?