计算两个日期之间的天数

问题描述 投票:0回答:13

如何计算这两个日期之间的天数?

start_date = Date.parse "2012-03-02 14:46:21 +0100"
end_date =  Date.parse "2012-04-02 14:46:21 +0200"
ruby activesupport
13个回答
254
投票

使用日期(和日期时间)类,您可以执行

(end_date - start_date).to_i
来获取天数差异。


144
投票

假设

end_date
start_date
都是 Rails 中的
ActiveSupport::TimeWithZone
类,那么你可以使用:

(end_date.to_date - start_date.to_date).to_i

41
投票

Rails 有一些内置的 helpers 可以为你解决这个问题。要记住的一件事是,这是 Actionview Helpers 的一部分,因此无法直接从控制台使用它们。

试试这个

<% start_time =  "2012-03-02 14:46:21 +0100" %>
<% end_time   =  "2012-04-02 14:46:21 +0200" %>
<%= distance_of_time_in_words(start_time, end_time)  %>

 "about 1 month"

36
投票

获取某个时间范围内的天数(只是所有天数的计数)

(start_date..end_date).count
(start_date..end_date).to_a.size
#=> 32

获取两个日期之间的天数

(start_date...end_date).count
(start_date...end_date).to_a.size
#=> 31

35
投票

我不断在几秒钟内得到结果,所以这对我有用:

(Time.now - self.created_at) / 86400

20
投票

(到目前为止)之前的答案都没有给出两个日期之间正确的天数差异。

最接近的是thatdankent。完整的答案将转换

to_i
然后除以:

(Time.now.to_i - 23.hours.ago.to_i) / 86400
>> 0

(Time.now.to_i - 25.hours.ago.to_i) / 86400
>> 1

(Time.now.to_i - 1.day.ago.to_i) / 86400
>> 1

在问题的具体示例中,如果经过的时间相关,则不应解析为

Date
。请使用
Time.parse
来代替。


9
投票

很晚了,但可能对其他人有帮助:

end_date.mjd - start_date.mjd

https://apidock.com/ruby/Date/mjd

提示:这仅适用于日期对象,不适用于时间对象。


6
投票

获取两个日期之间的整天数(

DateTime
对象):

((end_at - start_at).to_f / 1.day).floor

5
投票

目前我所看到的始终有效的最佳解决方案是使用以下模式:

(end_date.beginning_of_day - Time.now.utc.beginning_of_day).seconds.in_days

2
投票

要获取两个日期相差的天数:

(start.to_date...end.to_date).count - 1
or 
(end.to_date - start.to_date).to_i

0
投票
(end_date - start_date)/1000/60/60/24

任何人有最佳实践请在下面评论


0
投票
start_date = 2.years.ago
end_date = 6.months.ago
diff = end_date - start_date

duration = ActiveSupport::Duration.build(diff)
=> 1 year, 6 months, 1 day, 3 hours, 16 minutes, and 12.64903700351715 seconds
duration.parts
=> {:years=>1, :months=>6, :days=>1, :hours=>3, :minutes=>16, :seconds=>12.64903700351715}
duration.in_days
=> 549.0

文档:ActiveSupport::持续时间


-9
投票
def business_days_between(date1, date2)
  business_days = 0
  date = date2
  while date > date1
   business_days = business_days + 1 unless date.saturday? or date.sunday?
   date = date - 1.day
  end
  business_days
end
© www.soinside.com 2019 - 2024. All rights reserved.