计算两个日期之间的天数

时间:2012-03-05 19:41:49

标签: ruby

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

start_date = Date.parse "2012-03-02 14:46:21 +0100"
end_date =  Date.parse "2012-04-02 14:46:21 +0200"

11 个答案:

答案 0 :(得分:191)

使用Date(和DateTime)类,您可以(end_date - start_date).to_i获取天数差异。

答案 1 :(得分:97)

假设end_datestart_date都是Rails中的ActiveSupport::TimeWithZone类,那么您可以使用:

(end_date.to_date - start_date.to_date).to_i

答案 2 :(得分:32)

Rails有一些内置的helpers可以为你解决这个问题。要记住的一件事是,这是Actionview助手的一部分,所以它们不能直接从控制台上获得。

试试这个

<% 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"

答案 3 :(得分:28)

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

(Time.now - self.created_at) / 86400

答案 4 :(得分:14)

获取时间范围内的天数(仅计算所有天数)

(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

答案 5 :(得分:9)

之前的答案(截至此日期)均未给出两个日期之间天数的正确差异。

最接近的是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

答案 6 :(得分:3)

要获得两个日期(DateTime个对象)之间的整天数:

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

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

很晚了,但它可能会帮助其他人:

end_date.mjd - start_date.mjd

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

答案 9 :(得分:0)

(end_date - start_date)/1000/60/60/24

任何人都有最佳做法,请在下面评论

答案 10 :(得分:-7)

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