Railsの日時を操作するメソッドたち

を調べてたメモ。数があるので前後セットで覚えるのが良さそう。

前後の日付を返す

  • tomorrow , yesterdayで翌日、前日の日付を返す。
  • next_year , prev_yearで翌年、去年の日付を返す。
  • next_month , prev_monthで翌月、前月の日付を返す。

はじめ、終わりを返す

  • beginning_of_week, end_of_weekはレシーバの日付からそれぞれ週の初めと終わりを返す。 基準となる曜日は config.beginning_of_week で指定することができる。
  • beginning_of_day はレシーバの日付の0時0分を返す。
  • end_of_dayはレシーバの日付の23時59分59秒を返す

docs.ruby-lang.org

[60] pry(main)> DateTime.now.tap{|t| p t.iso8601(6)}.end_of_day.iso8601(6)
"2018-11-08T10:42:05.750411+09:00"
=> "2018-11-08T23:59:59.999999+09:00"

特定の値分前後させた日付を返す

  • years_ago nはn年前の日付を返す
  • years_since nはn年後の日付を返す

特定の日付にする

  • advanceはレシーバの日付を基準にしてハッシュで指定した年月日の数値分を加減算する。
[37] pry(main)> Date.today.tap{|d| p d}.advance(years: 1, months: 1, days:-1)
Thu, 08 Nov 2018
=> Sat, 07 Dec 2019
  • changeはレシーバの日付を無視してハッシュで指定した年月日の数値に変更する。
    • advanceと違ってハッシュは単数
    • 負数を入れると配列と同じように最後を返すので、月末にも対応できる。けどend_of_monthを使うのが良さそう。
[47] pry(main)> Date.today.tap{|d| p d}.change(year: 2012, month: 2, day:-1)
Thu, 08 Nov 2018
=> Wed, 29 Feb 2012

参考

Ruby on Rails API Date - リファレンス - - Railsドキュメント