basyura's blog

あしたになったらほんきだす。

日付・時刻の計算

ある時刻に加減を行う際の計算方法と、2つの時間の差を分で表したい時の計算方法がパッと出なかった・・・。ホントは VisualuRuby でササッと計算アプリを作りたかったのに。
結局 javascript で Date オブジェクトを作って Date#getTime の差を計算したうえで Date#setTime で戻すといったものを書いた。んで、hta にして渡した。

いろいろ納得がいかなかったのでおさらい。

DateTime を使う

require 'date'

date = DateTime.new(2011 , 6 , 27 , 22 , 6)
puts date.strftime("%Y/%m/%d %H:%M:%S")
#=> 2011/06/27 22:06:00

# 1 日前
puts (date - 1).strftime("%Y/%m/%d %H:%M:%S")
#=> 2011/06/26 22:06:00

# 1 時間前
puts (date - (1.0 / 24.0)).strftime("%Y/%m/%d %H:%M:%S")
#=> 2011/06/27 21:06:00

# 1 分前
puts (date - (1.0 / (24.0 * 60.0))).strftime("%Y/%m/%d %H:%M:%S")
#=> 2011/06/27 22:05:00

Time を使う

time = Time.local(2011 , 6 , 27 , 22 , 6)
puts time.strftime("%Y/%m/%d %H:%M:%S")
#=> 2011/06/27 22:06:00

# 1 日前
puts (time - (24 * 60 * 60)).strftime("%Y/%m/%d %H:%M:%S")
#=> 2011/06/26 22:06:00

# 1 時間前
puts (time - 60 * 60).strftime("%Y/%m/%d %H:%M:%S")
#=> 2011/06/27 21:06:00

# 1 分前
puts (time - 60).strftime("%Y/%m/%d %H:%M:%S")
#=> 2011/06/27 22:05:00

# 差(分)
time2 = Time.local(2011 , 6 , 28 , 23 , 6)
puts (time2 - time) / (60 * 60)
#=> 25.0

Time を使って秒を基準に計算する方が楽だった。