如何计算这两个日期之间的天数?
start_date = Date.parse "2012-03-02 14:46:21 +0100" end_date = Date.parse "2012-04-02 14:46:21 +0200"
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
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"
使用 Date (和 DateTime)类,您可以执行 (end_date - start_date).to_i来获得天数差异。
(end_date - start_date).to_i
假设 end_date和 start_date都是 Rails 中的 ActiveSupport::TimeWithZone类,那么您可以使用:
end_date
start_date
ActiveSupport::TimeWithZone
(end_date.to_date - start_date.to_date).to_i
我一直在几秒钟内得到结果,所以这对我很有用:
(Time.now - self.created_at) / 86400
以获得一个时间范围内的天数(仅计算所有天数)
(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
以前的答案(到今天为止)都没有给出两个日期之间天数的正确差异。
最接近的是 谢谢。完整的答案将转换 to_i,然后除以:
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代替。
Date
Time.parse
两个日期之间的整天数(DateTime对象) :
DateTime
((end_at - start_at).to_f / 1.day).floor
按两个日期得到天数差:
(start.to_date...end.to_date).count - 1 or (end.to_date - start.to_date).to_i
(end_date - start_date)/1000/60/60/24
任何人有最好的做法,请在下面评论
很晚了,但这可能对其他人有帮助:
end_date.mjd - start_date.mjd
Https://apidock.com/ruby/date/mjd
提示: 这只适用于 Date 对象,而不适用于 Time 对象。
我目前看到的最好的解决方案是使用以下模式:
(end_date.beginning_of_day - Time.now.utc.beginning_of_day).seconds.in_days