Вычитание даты и времени в 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