【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)
以上になります。