Answers:
使用Date(和DateTime)类,您可以(end_date - start_date).to_i
获取天数差异。
Time
对象确实返回秒。
Time
对象,而不是Date
对象。也许您可以更新评论中的命名以反映它们不是日期?
假设end_date
和start_date
都是ActiveSupport::TimeWithZone
Rails中的类,那么您可以使用:
(end_date.to_date - start_date.to_date).to_i
(Time.zone.now.to_date - 23.hours.ago.to_date).to_i
它,它给出1且应为0
Time.zone.now.to_date
返回“ Wed,15 Nov 2017”,而23.hours.ago.to_date
返回“ Tue,14 Nov 2017”。除非您在午夜之前的一小时内运行代码,否则天数之差应为1。
Rails内置了一些帮助程序,可以为您解决这个问题。要记住的一件事是,这是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"
以获得时间范围内的天数(仅计算所有天数)
(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
先前的答案(到此日期)都没有给出两个日期之间的正确天数差异。
最接近的那个人是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
代替。
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