2012-07-16 2 views
3

나는 Date 개체가 몇 일 전인지 알아 내려고하고 있습니다. 내가 (Date.today - 30.days.ago.to_date).to_i을 수행 할 때루비 날짜 계산 : 하루에 왜 꺼내야합니까?

(Date.today - start_time).to_i 

나는 29를 얻을. 생각?

+2

당신이 Date.today 및 30.days.ago.to_date의 원시 출력을 인쇄 할 수 있습니다

적절한 수정 로컬 시간대로 반환 된 시간을 변환하는 agolocaltime를 호출하는 것입니다 – lulalala

답변

8

반올림 문제가 발생합니까? to_i은 부동 소수점 또는 유리수를 잘라 버리기 때문에 반올림하기에 적합하지 않습니다.

그래서 표현은 기본적으로 30 인, 29.999999 반환하지만 당신은 당신이 올바른 수학 반올림하지 round 사용되는 대신 무엇을해야 29

와 끝까지 그것에 to_i를 실행하는 경우 :

(Date.today - 30.days.ago.to_date).round 
=> 30 

편집은 사실 내가 잘못했다. 그 이유는 레일 ago 메서드가 현지 시간이 아닌 UTC 시간대로 시간을 반환하기 때문입니다. Date.today가 현지 시간으로 돌아 오는 것 같습니다.

운이 좋으면 현지 시간과 UTC 시간차가 자정을 넘으면 1 일 오프셋이 발생합니다.

30.days.ago 
=> Sat, 16 Jun 2012 03:17:44 UTC +00:00 

30.days.ago.localtime 
=> Sat Jun 16 06:21:47 +0300 2012 

(Date.today - 30.days.ago.localtime.to_date).to_i 
=> 30