2013-03-31 3 views
2

매월 실행되는 루프를 만들려고하고 있는데 논리가 윤년을 고려하지 않는다는 것을 알았습니다.레일 Time.now.end_of_month 윤년을 고려하지 않음

이 나는 ​​시도했다 :

newDate = (Time.now.beginning_of_month.to_date - 2.months) + 3.years 

newDate = (Time.now.to_date - 2.months).end_of_month + 3.year 

그들은 모두 Sun, 28 Feb 2016를 반환

.

왜 윤년을 계산하지 않고 2 월 29 일을 반환하지 않는 이유는 무엇입니까?

참고 :이 질문은 2013 년 3 월 31 일에 요청되었으며 다른 날에는 코드가 다르게 작동합니다.

+1

왜 설명이없는 downvotes? 나에게 유효한 질문처럼 보입니까? – Catfish

답변

3

계산은 현재 연도의 월말을 계산 한 다음 3 년을 추가하기 때문입니다. = 28

(Time.now.beginning_of_month.to_date - 1.month) 2 월 2013 년 3 년 추가하면 28 얻을 2 월 2016

대신 시도 - BTW

((Time.now.beginning_of_month.to_date - 1.month) + 3.years).end_of_month 

2 개월 감산 (헤세이 그것 아직도 31 날 소요 3 월 여기)

+0

대단히 감사합니다. 그건 의미가 있습니다. – Catfish

+0

나는'- 1.month'가이 질문에 불과하다는 것을 안다. 그래서 한 달 안에 다시 데이터가 없어 질 것이다. – Catfish

+0

도움이되어서 기쁩니다. 한 달 동안 사실 일 가능성이 높습니다. 그렇지 않으면 몇 가지 의견을 볼 수 있습니다. P –

관련 문제