Вычитание даты и времени в ruby 2?
мне нужно вычесть два DateTime
объекты, чтобы узнать разницу в часах между ними.
Я пытаюсь сделать следующее:
a = DateTime.new(2015, 6, 20, 16)
b = DateTime.new(2015, 6, 21, 16)
puts a - b
я (-1/1)
объект класса Rational
.
Итак, вопрос в том, как мне узнать, в чем разница между двумя датами? В часов, или дней, или что угодно.
а что это Rational
mean / represent, когда я вычитаю DateTimes так же, как это?
BTW:
когда я пытаюсь вычесть DateTime
С разницей в 1 год, я получаю (366/1)
, поэтому, когда я делаю (366/1).to_i
, Я получаю количество дней. Но когда я попытался вычесть два DateTime
С разницей в 1 час, это дало мне -1
, количество часов. Итак, как мне также узнать значение возвращаемого значения (часы, дни, годы, секунды)?
2 ответов
когда вы вычесть два времени, вы получите разницу дней, а не часов.
Вы получаете Rational
введите для точности (некоторые числа float не могут быть точно выражены с помощью компьютеров)
чтобы получить количество часов, умножьте результат на 24, в течение минут умножьте на 24 * 60 и т. д...
a = DateTime.new(2015, 6, 20, 16)
b = DateTime.new(2015, 6, 21, 16)
(a - b).to_i
# days
# => -1
((a - b)* 24).to_i
# hours
# => -24
# ...
Если вы делаете вычитание на них как объект времени, он вернет результат в секундах, а затем вы можете умножить соответственно, чтобы получить минуты/часы/дни/что угодно.
a = DateTime.new(2015, 6, 20, 16)
b = DateTime.new(2015, 6, 21, 16)
diff = b.to_time - a.to_time # 86400
hours = diff / 60 / 60 # 24