我正在尝试计算周 中的距离,因为给定的日期没有跳过箍。我更喜欢用普通的Ruby来做,但ActiveSupport肯定是一个可以接受的替代方案。
我写了以下内容,这似乎有效,但对我来说似乎还有很长的路要走。
require 'date'
DAYS_IN_WEEK = 7.0
def weeks_since date_string
date = Date.parse date_string
days = Date.today - date
weeks = days / DAYS_IN_WEEK
weeks.round 2
end
weeks_since '2015-06-15'
#=> 32.57
ActiveSupport的#weeks_since需要花费数周时间才能成为其论据,因此它不适合此用例。 Ruby的Date class似乎也没有任何相关性。
是否有更好的内置解决方案或众所周知的算法来计算分隔一对日期的周数?我不打算对此进行编码 - 因为可读性胜过简洁,而只是为了了解Ruby本身是否支持我手工编码的日期算术类型。
答案 0 :(得分:10)
require 'date'
str = '2015-06-15'
Date.parse(str).step(Date.today, 7).count # => 33
Date.parse(str).upto(Date.today).count.fdiv(7).round(2) # => 32.71
答案 1 :(得分:3)
可能更容易将日期转换为时间,然后将时差除以一周。您可以随意round
或ceil
。
def weeks_since(date_string)
time_in_past = Date.parse(date_string).to_time
now = Time.now
time_difference = now - time_in_past
(time_difference / 1.week).round(2)
end
答案 2 :(得分:3)
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-18 00:00:00 UTC')
date_2 = Time.parse('2020-08-13 03:35:38 UTC')
(date_2 - date_1).seconds.in_weeks.to_i.abs
# => 9