Just do IT

思うは招く

Rails で日付の取得をする

今の日時を取得

#Railsなら
$ rails c

#Rubyなら
$ irb
require 'active_support/all'  #Railsの場合は不要

irb(main):001:0> now = Time.current
=> Wed, 26 Aug 2020 12:19:59 JST +09:00

#Date.currentもある。日付だけほしいならこれでも
irb(main):004:0> Date.current
=> Thu, 10 Sep 2020

月末、月初を取得

end_of_monthで月末を取得できる。

irb(main):001:0> now = Time.current
=> Wed, 26 Aug 2020 13:28:12 JST +09:00

irb(main):002:0> now.end_of_month
=> Mon, 31 Aug 2020 23:59:59 JST +09:00

beginning_of_monthで月初を取得できる。

irb(main):005:0> now.beginning_of_month
=> Sat, 01 Aug 2020 00:00:00 JST +09:00

date表記で取得する。

irb(main):008:0> now.to_date
=> Sat, 29 Aug 2020

view側でループで日付を表示したい場合はdayで日付をとる。(to_date)でもいける。dayだと本当に「1」や「2」になる。

@beginning_of_month = Time.current.beginning_of_month.day
@end_of_month = Time.current.end_of_month.day

#view
- (@beginning_of_month..@end_of_month).each do |day|
  li = day

前日、翌日

irb(main):011:0> Date.current.prev_day
=> Fri, 18 Sep 2020

irb(main):012:0> Date.current.next_day
=> Sun, 20 Sep 2020

class Date (Ruby 2.7.0 リファレンスマニュアル)

30日前、30日後

#30日前
irb(main):005:0> now.ago(30.days)
=> Mon, 27 Jul 2020 12:19:59 JST +09:00

#30日後
irb(main):004:0> now.since(30.days)
=> Fri, 25 Sep 2020 12:19:59 JST +09:00

1ヶ月前、1ヶ月後

#1ヶ月前
irb(main):006:0> now.ago(1.month)
=> Sun, 26 Jul 2020 12:19:59 JST +09:00

#1ヶ月後
irb(main):007:0> now.since(1.month)
=> Sat, 26 Sep 2020 12:19:59 JST +09:00

前後一ヶ月を取るならこちらのほうがシンプルに書ける。

irb(main):009:0> now.prev_month
=> Wed, 29 Jul 2020 12:08:02 JST +09:00

irb(main):010:0> now.next_month
=> Tue, 29 Sep 2020 12:08:02 JST +09:00

1年前、1年後

#1年前
irb(main):010:0> now.ago(1.year)
=> Mon, 26 Aug 2019 12:19:59 JST +09:00

#1年後
irb(main):009:0> now.since(1.year)
=> Thu, 26 Aug 2021 12:19:59 JST +09:00

こちらも前後一ヶ月と同様に、前後1年を取るならこのほうがシンプルに書ける。

irb(main):011:0> now.next_year
=> Sun, 29 Aug 2021 12:08:02 JST +09:00

irb(main):012:0> now.last_year
=> Thu, 29 Aug 2019 12:08:02 JST +09:00

Date.today と Date.current の違い

参考