3
나는 Date
개체가 몇 일 전인지 알아 내려고하고 있습니다. 내가 (Date.today - 30.days.ago.to_date).to_i
을 수행 할 때루비 날짜 계산 : 하루에 왜 꺼내야합니까?
(Date.today - start_time).to_i
나는 29
를 얻을. 생각?
나는 Date
개체가 몇 일 전인지 알아 내려고하고 있습니다. 내가 (Date.today - 30.days.ago.to_date).to_i
을 수행 할 때루비 날짜 계산 : 하루에 왜 꺼내야합니까?
(Date.today - start_time).to_i
나는 29
를 얻을. 생각?
반올림 문제가 발생합니까? 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
당신이 Date.today 및 30.days.ago.to_date의 원시 출력을 인쇄 할 수 있습니다
적절한 수정 로컬 시간대로 반환 된 시간을 변환하는
ago
에localtime
를 호출하는 것입니다 – lulalala