おぴよの気まぐれ日記

おぴよの気まぐれ日記

岡山やプログラミング、ファッションのこと、子育てや人生、生き方についての備忘録。

【Ruby on Rails】時分秒を操るにはTime#changeメソッド

こんにちは。opiyoです。

今回はRailsを使った時分秒を操り方をの紹介です。

  • ある一定の時間内のデータを取得したい!
  • 時分秒だけじゃなくて年月日はできるの?

「1ヶ月」 = 「月初 ~ 月末」ってのはよく使うから知っているのですが、「時間」 = 「12時00分00秒 ~ 12時59分59秒」までの1時間内に登録されたデータを取得したい場面があって調べてみました。

changeメソッドで「時間」を操る

changeメソッドの引数にhourと指定したい時間を渡します。

> Time.current.to_s
=> "2020/01/09 22:00"

> Time.current.change(hour: 1).to_s
=> "2020/01/09 01:00"

changeメソッドで「分」を操る

changeメソッドの引数にminと設定したい分を渡します。

> Time.current.to_s
=> "2020/01/09 22:01"

> Time.current.change(min: 30).to_s
=> "2020/01/09 22:30"

changeメソッドで「秒」を操る

changeメソッドの引数にsecと設定したい秒を渡します。 ※to_sすると秒が消える....??

> Time.current
=> Thu, 09 Jan 2020 22:03:27 JST +09:00

> Time.current.change(sec: 59)
=> Thu, 09 Jan 2020 22:04:59 JST +09:00

changeメソッドで年月日を操る

Dateにもchangeメソッドは準備されていて、年月日を操ることができます。

> Date.current.to_s
=> "2020/01/09"
> Date.current.change(year: 2019).to_s
=> "2019/01/09"
> Date.current.change(month: 12).to_s
=> "2020/12/09"
> Date.current.change(day: 31).to_s
=> "2020/01/31"

年月日を操る時は便利メソッドがある!

  • 年を操る
> Date.current.to_s
=> "2020/01/09"
> Date.current.beginning_of_year.to_s
=> "2020/01/01"
  • 月を操る
> Date.current.end_of_year.to_s
=> "2020/12/31"
> Date.current.beginning_of_month.to_s
=> "2020/01/01"
  • 日を操る
> Date.current.end_of_month.to_s
=> "2020/01/31"
> Date.current.beginning_of_day.to_s
=> "2020/01/09 00:00"
> Date.current.end_of_day.to_s
=> "2020/01/09 23:59"

昔の記事で使い方まとめています! opiyotan.hatenablog.com

Railsで時分秒を操るchangeメソッドまとめ

例えば、現在の時刻を基準に「XX時00分00秒 ~ XX時59分59秒」の1時間内のデータを取得したい場合はこんな感じになるかなと思います。

start_time = Time.current.change(min: 00)
end_time = Time.current.change(min: 59, sec: 59)
AccessLog.where(created_at: start_time..end_time)

以上になります。