ある時刻に加減を行う際の計算方法と、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 を使って秒を基準に計算する方が楽だった。