计算两个date之间的天数

我如何计算这两个date之间的天数?

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

使用Date(和DateTime)类可以执行(end_date - start_date).to_i以获得天数差异。

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

 (end_date.to_date - start_date.to_date).to_i 

Rails有一些内置的帮助器可以帮你解决这个问题。 有一件事要记住,这是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" 

我在几秒钟内得到的结果,所以这对我工作:

 (Time.now - self.created_at) / 86400 

以前的答案(到这个date)都没有给出两个date之间的正确差异。

最接近的那个是那个 。 一个完整的答案将转换为to_i然后划分:

 (Time.now.to_i - 23.hours.ago.to_i) / 1.day >> 0 (Time.now.to_i - 25.hours.ago.to_i) / 1.day >> 1 (Time.now.to_i - 1.day.ago.to_i) / 1.day >> 1 

在这个问题的具体例子中,如果时间stream逝是相关的,那么就不应该parsing为Date 。 使用Time.parse代替。

得到一个时间范围内的天数(只是所有天数)

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

获取两个date之间的天数

 (start_date...end_date).count (start_date...end_date).to_a.size #=> 31 
 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