LoginSignup
2
2

More than 5 years have passed since last update.

【Ruby】期間内で一定間隔ごとの時間を生成

Last updated at Posted at 2018-04-15

now 以降の begin_time から end_time まで、 interval 分間隔の時間を生成するメソッド


require 'Time'

def time_box(begin_time, end_time, interval, now)
    # インターバルを分に直す
    interval_time = interval * 60
    # 入力を時間にキャスト
    begin_datetime = Time.parse(begin_time)
    end_datetime   = Time.parse(end_time)
    now_datetime   = Time.parse(now)

    # いくつ生成するのか
    times_count = (begin_datetime - end_datetime).to_i.abs/interval_time if  begin_datetime < end_datetime
    times_count = ((begin_datetime - Time.parse('24:00')) + (Time.parse('0:00') - end_datetime) ).to_i.abs/interval_time if  begin_datetime > end_datetime
    times_count+= 1

    # begin_datetimeから interval_time分間隔で、time_count個時間を生成
    times =  times_count.times.map.each_with_index {|i| Time.parse((begin_datetime + interval_time*i).to_s)}

    # 現在時刻以降の値のみ抽出
    times = times.select{|t| t > now_datetime }

    # 時刻の表示を整形
    times.each_with_index do |val|
        if val.hour >= 7
            val.strftime("%H:%M")
        else
            "#{val.hour+24}:#{val.strftime("%M")} (翌日 #{val.strftime("%H:%M")})"
        end
    end
end



# 現在時刻
now = '23:40'

# 実行
p time_box('11:00', '12:00', 15, now)
p time_box('1:00', '2:00', 15, now)
p time_box('23:30', '0:30', 15, now)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2