如何计算这两个日期之间的天数?
start_date = Date.parse "2012-03-02 14:46:21 +0100"
end_date = Date.parse "2012-04-02 14:46:21 +0200"
如何计算这两个日期之间的天数?
start_date = Date.parse "2012-03-02 14:46:21 +0100"
end_date = Date.parse "2012-04-02 14:46:21 +0200"
(end_date - start_date).to_i
来获取天数差异。end_date
和 start_date
都属于 ActiveSupport::TimeWithZone
类,那么你可以使用以下方法:(end_date.to_date - start_date.to_date).to_i
(Time.zone.now.to_date - 23.hours.ago.to_date).to_i
无效,它给出1,应该是0。 - Yuri GhensevTime.zone.now.to_date
返回“Wed, 15 Nov 2017”,而23.hours.ago.to_date
返回“Tue, 14 Nov 2017”。除非您在午夜前一小时运行代码,否则天数差异应该是1,而且应该是1。 - lee<% 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
获取2个日期之间的天数
(start_date...end_date).count
(start_date...end_date).to_a.size
#=> 31
我总能在几秒钟内得到结果,所以这对我有用:
(Time.now - self.created_at) / 86400
截至目前,之前的所有回答都没有正确地给出两个日期之间的天数差。
最接近正确答案的是来自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
。虽然有些晚了,但这可能会对其他人有所帮助:
end_date.mjd - start_date.mjd
https://apidock.com/ruby/Date/mjd
提示:这只适用于日期对象,不适用于时间对象。
DateTime
对象):((end_at - start_at).to_f / 1.day).floor
(end_date.beginning_of_day - Time.now.utc.beginning_of_day).seconds.in_days
(start.to_date...end.to_date).count - 1
or
(end.to_date - start.to_date).to_i
Time
对象确实会返回秒数。 - Andrew France