2016-10-31 3 views
2

나는 정말 이상한 것을 발견했습니다. "Carbon"패키지를 사용하여 DateTime 객체를 생성합니다.PHP Carbon "month()"메서드가 잘못된 DateTime을 생성합니다.

나는 9 월 2016 시작을위한 날짜 시간 문자열을 만들려면 다음 코드를 사용

Carbon::create()->month(9) 

만약 I 출력이 Laravel의 사용 "DD을()"기능, 나는 다음과 같은 출력이 나타납니다

Carbon\Carbon { 
    +"date": "2016-10-01 10:22:36.000000" 
    +"timezone_type": 3 
    +"timezone": "Europe/Vienna" 
} 

9 월 1 일보다는 1 월 1 일을 반환합니다! 격월로 잘 작동합니다.

필자는 이러한 시도 :

Carbon::now()->month(9) 
(new Carbon)->month(9) 

을하지만이 같은 잘못된 결과를 얻을.

누구든지이 버그가 발생합니까? 아니면 누군가가 동일한 결과를 얻었는지 알려주시겠습니까? 아니면 아무 것도 생각할 수 없더라도 나는 단지 잘못하고있는 것입니까?

미리 감사드립니다.

+0

을 당신과 정확히 같은 배입니다 ... http://stackoverflow.com/questions/40339101/php-을 carbon datetime-added-two-months-and-skips- november- 완전히 noredirect = 1 # comment67932907_40339101 –

+0

오늘은 31 일과 윤년이 한 달을 건너 뛰는 것과 관련이있는 것으로 보입니다. 내 전체 스케줄링 응용 프로그램을 엉망으로 만들었으므로이 성가신 버그에 대한 해결책을보고 싶어합니다. –

+0

솔직히 말해서 나는 이것에 대해 무엇을해야할지 정말로 모른다. – Florian

답변

1

문제는 오늘 날짜가 31 일이라고 생각합니다.

Carbon::create()->month(9)은 9 월에 당일 치기를 시도합니다. 9 월에는 31 일이 없으므로 10 월 1 일을 반환합니다. 시도 :

Carbon::create()->day(1)->month(9); 

또는

Carbon::create()->startOfMonth()->month(9); 

또는

Carbon::create(null, 9); 
+0

두 번째로 작동하는 것 같습니다. 감사합니다! :) – Florian