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

Number of hours between two dates - Ruby

假设我想要明天和现在之间的差异(以小时为单位)。

我试过的

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

为什么给出0?

我究竟做错了什么?


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

1
2
DateTime.tomorrow
# => Wed, 22 Apr 2015

如果查看DateTime的官方文档,则可以看到没有方法tomorrow。 它基本上是Date#tomorrow

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

1
2
3
4
5
DateTime.tomorrow.to_time
# => 2015-04-22 00:00:00 +0530

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

要获取日期之间的确切时差:

1
2
(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

如果你有两个约会

1
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的时差宝石

1
2
3
def timediff(start, end)
  TimeDifference.between(start, end).in_hours
end

并这样称呼:

1
timediff(start_time, end_time)

它将起作用。
干杯!


DateTime#seconds_until_end_of_day

1
2
3
4
5
6
7
8
seconds = DateTime.now.seconds_until_end_of_day
#=> 41133

seconds / 3600
#=> 11

distance_of_time_in_words(seconds)
=>"about 11 hours"

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

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

或者,如果您想从现在开始数小时内获得价值,请使用Time类:

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