两个日期之间的小时数 - Ruby

时间:2015-04-21 09:22:15

标签: ruby-on-rails ruby

说我想要明天和现在(以小时为单位)之间的区别。

我尝试过的事情:

t = (DateTime.tomorrow - DateTime.now)
(t / 3600).to_i
=> 0

为什么会给0?

我做错了什么?

5 个答案:

答案 0 :(得分:15)

这是因为DateTime.tomorrow没有任何时间价值。这里:

DateTime.tomorrow
# => Wed, 22 Apr 2015

如果您浏览official document for DateTime,则可以看到没有方法tomorrow。它基本上是Date#tomorrow

您可以使用.to_time获取默认的本地时间00:00:00

DateTime.tomorrow.to_time
# => 2015-04-22 00:00:00 +0530

(DateTime.tomorrow.to_time - DateTime.now) / 1.hours
# => 9.008116581638655

要获得日期之间的确切小时差异:

(DateTime.tomorrow.to_time - Date.today.to_time) / 1.hours 
# => 24.0

答案 1 :(得分:2)

试试这个

t = (DateTime.tomorrow.to_time - Date.today.to_time)
t = (t / 3600).to_i

答案 2 :(得分:2)

如果你有两个日期,比如

start_time = Time.new(2015,1, 22, 35, 0)
end_time = Time.new(2015,2, 22, 55, 0)

https://rubygems.org/gems/time_difference

尝试Ruby的时差宝石
def timediff(start, end)
  TimeDifference.between(start, end).in_hours
end

并称之为:

timediff(start_time, end_time)

它会起作用。 干杯!

答案 3 :(得分:1)

DateTime#seconds_until_end_of_day

seconds = DateTime.now.seconds_until_end_of_day
#=> 41133

seconds / 3600
#=> 11

distance_of_time_in_words(seconds)
=> "about 11 hours"

答案 4 :(得分:0)

返回有理数。如果您使用round方法,则可以使用天数:

>> (DateTime.tomorrow - DateTime.now).round
1

或者,如果您想在几小时内获取价值,请使用Time类:

>> (Date.tomorrow.to_time - Time.now) / 1.hour
11.119436663611111