Tod*_*obs 6 ruby date date-arithmetic
我试图计算自给定日期以来几周内的距离而没有跳过篮球.我更喜欢用纯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
Run Code Online (Sandbox Code Playgroud)
ActiveSupport的#weeks_since需要花费数周作为参数,因此它不适合这个用例.Ruby的Date类似乎也没有任何相关性.
是否有更好的内置解决方案或众所周知的算法来计算分隔一对日期的周数?我不打算对此进行编码 - 因为可读性胜过简洁,而只是为了了解Ruby本身是否支持我手工编码的日期算术类型.
sbs*_*sbs 11
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
Run Code Online (Sandbox Code Playgroud)
小智 6
可能更容易将日期转换为时间,然后将时差除以一周。您可以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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
这是相应 PR 的链接。
| 归档时间: |
|
| 查看次数: |
2808 次 |
| 最近记录: |