2009-09-01 4 views
4

내 코드에서 동적 인 Time.local을 사용하여 시간을 절약하려고합니다. 매월 초에 지나가는 값은 Time.local (2009, 9, -1, 0)입니다. PHP에서는 이전 달의 마지막 날까지 시간을 설정합니다. 루비에서 나는 "ArgumentError : argument out of range"를 얻는다.Ruby 날짜 인수가 범위를 벗어났습니다.

잘못된 방법이나 다른 것을 사용하고 있습니까? 감사.

답변

10

Time 대신 DateTime 클래스를 사용해야합니다. (당신은 require 'date'에이 먼저 activesupport 보석을 설치할 수 있습니다.)

그것은 훨씬 더 다양한 Time보다 당신이 DateTime.civil(2009,9 - 1,-1,0)으로 원하는 것을 단지 않습니다.

당일 -1을 전달하면 두 번째 인수에서 매월 마지막 날의 날짜가 제공되므로 현재 달에서 1을 빼야합니다.

레일스에 있다면 DateTime.civil(2009,9,1,0) - 1.day을 사용하여 더 이해하기 쉬운 코드로 원하는 것을 얻을 수 있습니다.

+0

그러나 이번 달의 마지막 날을 설정합니다. 그렇습니까? – jgre

+0

예 : >> DateTime.civil (2009,9, -1) => 2009 년 9 월 30 일 수요일 00:00:00 +0000 거의 들었습니다! – sebastyuiop

+0

아, 네가 거기에 작은 실수를 저질렀다. 원래의 답변을 수정합니다. – mrueg

관련 문제