回答:
Date(およびDateTime)クラスを使用する(end_date - start_date).to_i
と、日数の差を取得できます。
Time
ただし、オブジェクトは秒を返します。
Time
オブジェクトではなくDate
オブジェクトを誤って参照している場合を除きます。コメントの名前を更新して、日付ではないことを反映できますか?
それがRails のクラスの両方である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である必要があり、
Time.zone.now.to_date
「2017年11月15日水曜日」を23.hours.ago.to_date
返し、「2017年11月14日火曜日」を返します。日数の違いは、午前0時の前の時間にコードを実行しない限り、1であるはずです。
Railsには、これを解決するヘルパーがいくつか組み込まれています。注意すべき点の1つは、これは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
1.day
はruby
、OPで要求されたものとは異なります(タグ内)。それはだRails
か、より具体的なactive support
もののcreated_at
、基本的にはModel
中の方法Rails
..だから
(この日付に対する)以前の回答のいずれも、2つの日付間の日数の正確な違いを示していません。
最も近いものは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