如何計算這兩個日期之間的天數?計算兩個日期之間的天數
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"
日期(和DateTime)班,你可以做(end_date - start_date).to_i
獲得天差數。
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有內建的helpers可能解決這個給你。有一點需要記住的是,這是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"
假設end_date
和start_date
Rails中都ActiveSupport::TimeWithZone
類的,那麼你可以使用:
(end_date.to_date - start_date.to_date).to_i
如果它與表字段有關,這個答案是要走的路;而不是在這裏最受好評的一個。 – Ben 2014-04-05 21:52:43
不適用於'(Time.zone.now.to_date - 23.hours.ago.to_date).to_i',它給出1並且應該爲0 – 2017-02-04 16:21:12
@YuriGhensev,它取決於您何時運行示例代碼,現在示例'Time.zone.now.to_date'返回「2017年11月15日星期三」,而'23.hours.ago.to_date'返回「2017年11月14日星期二」。除非您在午夜前一小時運行代碼,否則天數的差異應爲1。 – lee 2017-11-15 20:01:32
到得到時間範圍內的天數(只是所有天數)
(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
無以前的答案(此日期)給人以天兩個日期之間的差異正確之間的天數。
最接近的那個是thatdankent。一個完整的答案將轉換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
在問題的具體的例子,一個人不應該對分析,如果Date
經過的時間是相關的。改爲使用Time.parse
。
要讓全日兩個日期(DateTime
對象)之間的數字:
是的,但用戶有字符串,你不能用字符串做到這一點。你需要他們作爲日期。看看我的答案是從核心擴展中添加to_date。 – 2012-03-05 19:59:27
@MichaelDurrant你正在做一個毫無根據的假設。用戶不指定它們是否是字符串。事實上,因爲他們使用Rails,所以最有可能的日期來自ActiveRecord,它會自動將它們轉換爲日期對象。給定的文本與日期對象表示形式相同,因此極有可能它來自本機源。 – 2012-03-05 20:04:15
正確我假設用戶嘗試了一個 - B,它沒有工作,所以他們最終張貼在SO上。我猜只有andkjaer可以告訴我們真正的交易:) – 2012-03-05 20:20:06