답변:
Date (및 DateTime) 클래스를 사용하면 (end_date - start_date).to_i
일 수 차이를 얻을 수 있습니다 .
Time
객체는 초를 반환합니다.
Time
아닌 Date
객체를 가리키는 것 입니다. 아마도 날짜가 아닌 것을 반영하여 주석의 이름을 업데이트 할 수 있습니까?
그 가정 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
은 "Wed, 15 Nov 2017"을 23.hours.ago.to_date
반환하고 "Tue, 14 Nov 2017" 을 반환합니다. 자정 전 한 시간에 코드를 실행하지 않는 한 일 수의 차이는 1이어야합니다.
Rails에는 이를 해결할 수 있는 내장 된 도우미 가 있습니다. 명심해야 할 것은 이것이 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
..
이 날짜까지의 이전 답변 중 어느 것도 두 날짜 사이의 정확한 차이를 제공하지 않습니다.
가장 가까운 것은 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