我试图得到两个不同的时间实例的小时数差异。我从数据库获取这些值作为:datetime列
如何做到这一点,以便在忽略或舍入分钟的同时,在计算中也包括月份和年份?只能手动完成此操作,还是可以执行此功能?
Answers:
((date_2 - date_1) / 3600).round
要么
((date_2 - date_1) / 1.hour).round
Time
或ActiveSupport::TimeWithZone
(通常从datetime
数据库列中获取)的实例即可。另一方面,对于Date
或的实例,Datetime
您需要乘以24才能达到相同的效果,因为内部单位是天,而不是秒。
在https://rubygems.org/gems/time_difference上尝试Ruby的时差宝石
start_time = Time.new(2013,1)
end_time = Time.new(2014,1)
TimeDifference.between(start_time, end_time).in_years
44.hours - 2.hours # => 42.hours
?
这很好用,例如自用户创建帐户以来的小时数
(Time.parse(DateTime.now.to_s) - Time.parse(current_user.created_at.to_s))/3600
在Rails中,现在有一种更自然的方法来实现此目的:
> past = Time.now.beginning_of_year
2018-01-01 00:00:00 +0100
> (Time.now - past) / 1.day
219.50031326506948
Rails 6.1引入了新的ActiveSupport :: Duration转换方法,例如in_seconds,in_minutes,in_hours,in_days,in_weeks,in_months和in_years。
结果,现在,您的问题可以解决为:
date_1 = Time.parse('2020-10-19 00:00:00 UTC')
date_2 = Time.parse('2020-10-19 03:35:38 UTC')
(date_2 - date_1).seconds.in_hours.to_i
# => 3
这是指向相应PR的链接。
(date_2 - date_1) * 24
时间