ryota21silvaの技術ブログ

Funna(ふんな)の技術ブログ

これまで学んだ技術の備忘録。未来の自分が救われることを信じて

【Ruby】Date型で色んなメソッドを試してみる

今日、昨日、○日前、○日後とか

# 今日
[1] pry(main)> Date.today
=> Sat, 22 Aug 2020
[6] pry(main)> Date.current
=> Sat, 22 Aug 2020

# 昨日
[7] pry(main)> Date.current.yesterday
=> Fri, 21 Aug 2020

# 昨日(1日前)
[8] pry(main)> Date.current.ago(1.day)
=> Fri, 21 Aug 2020 00:00:00 JST +09:00

# 3日前
[9] pry(main)> Date.current.ago(3.day)
=> Wed, 19 Aug 2020 00:00:00 JST +09:00

# 10日前
[8] pry(main)> Date.today.prev_day(10)
=> Mon, 17 Aug 2020

# 10日語
[7] pry(main)> Date.today.next_day(10)
=> Sun, 06 Sep 2020

# 2ヶ月後
[9] pry(main)> Date.today.next_month(2)
=> Tue, 27 Oct 2020

日・週・月などを丸々取得

# 今日24時間丸々
[16] pry(main)> Date.current.all_day
=> Sat, 22 Aug 2020 00:00:00 JST +09:00..Sat, 22 Aug 2020 23:59:59 JST +09:00

# 今週丸々
[17] pry(main)> Date.current.all_week
=> Mon, 17 Aug 2020..Sun, 23 Aug 2020

[18] pry(main)> Date.current.all_month
=> Sat, 01 Aug 2020..Mon, 31 Aug 2020
[19] pry(main)> Date.current.all_year
=> Wed, 01 Jan 2020..Thu, 31 Dec 2020

日・週・月などの始まり・終わり

# 今日の0時
[21] pry(main)> Date.current.beginning_of_day
=> Sat, 22 Aug 2020 00:00:00 JST +09:00

# 今週最初の日(月曜日)
[13] pry(main)> Date.current.beginning_of_week
=> Mon, 17 Aug 2020

# 今週最後の日(日曜日)
[14] pry(main)> Date.current.end_of_week
=> Sun, 23 Aug 2020

# 今月最後の日 
[15] pry(main)> Date.current.end_of_month
=> Mon, 31 Aug 2020

# 今年最後の日
[20] pry(main)> Date.current.end_of_year
=> Thu, 31 Dec 2020

指定したオブジェクトが、どんなメソッド等を使用できるのか確認する

ある型を持つオブジェクト(今回で言えばDate型)が、どのようなメソッドを使用できるのか確認する癖は付けておいた方がいいと思う。

[16] pry(main)> today = Date.today
=> Thu, 27 Aug 2020

[18] pry(main)> today.class
=> Date

[17] pry(main)> ls today
ActiveSupport::ToJsonWithActiveSupportEncoder#methods: to_json
ActiveSupport::Dependencies::ZeitwerkIntegration::RequireDependency#methods: require_dependency
Comparable#methods: <  <=  ==  >  >=  between?  clamp
DateAndTime::Zones#methods: in_time_zone
DateAndTime::Calculations#methods:
  after?       all_year                 at_end_of_month    beginning_of_month    days_since          end_of_year   last_weekday  next_occurring  on_weekend?     prev_weekday  weeks_since
  all_day      at_beginning_of_month    at_end_of_quarter  beginning_of_quarter  days_to_week_start  future?       last_year     next_quarter    past?           sunday        years_ago
  all_month    at_beginning_of_quarter  at_end_of_week     beginning_of_week     end_of_month        last_month    monday        next_week       prev_occurring  today?        years_since
  all_quarter  at_beginning_of_week     at_end_of_year     beginning_of_year     end_of_quarter      last_quarter  months_ago    next_weekday    prev_quarter    tomorrow      yesterday
  all_week     at_beginning_of_year     before?            days_ago              end_of_week         last_week     months_since  on_weekday?     prev_week       weeks_ago
Date#methods:
  +                ajd                  at_noon                   cwyear           gregorian   jd            midday                  new_start              prev_month        step            to_s
  -                amjd                 beginning_of_day          day              gregorian?  jisx0301      middle_of_day           next                   prev_year         strftime        to_time
  <<               as_json              blank?                    day_fraction     hash        julian        midnight                next_day               readable_inspect  succ            tuesday?
  <=>              asctime              change                    default_inspect  httpdate    julian?       minus_with_duration     next_month             rfc2822           sunday?         upto
  ===              at_beginning_of_day  compare_with_coercion     downto           in          ld            minus_without_duration  next_year              rfc3339           thursday?       wday
  >>               at_end_of_day        compare_without_coercion  end_of_day       infinite?   leap?         mjd                     noon                   rfc822            to_date         wednesday?
  acts_like_date?  at_midday            ctime                     england          inspect     marshal_dump  mon                     plus_with_duration     saturday?         to_datetime     xmlschema
  advance          at_middle_of_day     cwday                     eql?             iso8601     marshal_load  monday?                 plus_without_duration  since             to_default_s    yday
  ago              at_midnight          cweek                     friday?          italy       mday          month                   prev_day               start             to_formatted_s  year

参照記事