2017-04-17 4 views
1

내 Laravel 앱에서 PHP Carbon 패키지를 사용하여 날짜를 조작하고 있습니다.탄소가 잘못된 날짜로 돌아가는 버그

$start_date = Carbon::tomorrow('Europe/London'); 
$end_date = $start_date->addDays($tier->duration_days); 
Log::debug('Carbon::now(): '.Carbon::now()); 
Log::debug('Carbon::tomorrow(Europe/London): '.Carbon::tomorrow('Europe/London')); 
Log::debug('$start_date: '.$start_date); 
Log::debug('$end_date: '.$end_date); 

위의 코드는 다음 디버그 줄을 인쇄합니다 :

(미래의 X 일) 날짜

이 코드에서 봐 주시기 바랍니다을 생성 할 때 좀 이상한 결과를 데

2017년 4월 17일 21시 46분 31초] local.DEBUG 지금 탄소 ::() 2017년 4월 17일 21시 46분 31초
[2017년 4월 17일 21시 46분 31초 ] local.DEBUG : Carbon :: 내일 (유럽/런던) : 2017-04-18 00:00:00 [2017-04-17 21:46:31] local.DEBUG : $ start_date : 2017년 5월 16일 0시 0분 0초 [2017년 4월 17일 21시 46분 31초] local.DEBUG : $의 종료일 : 2017년 5월 16일 0시 0분 0초

탄소를 사용 : : tomorrow()는 정확한 날짜를 출력하지만 기술적으로 같은 함수를 사용하는 $ start_time을 사용하면 잘못된 날짜가 반환됩니다. 누군가 여기서 잘못 될 수있는 것에 대해 조언 할 수 있습니까?

FYI 유럽/런던을 내 config/app.php 파일에 시간대로 설정했습니다.

+1

'addDays()는 '탄소 객체 .... [탄소 addDays()하지만 기존 인스턴스를 modyfing없이 (https://laracasts.com/discuss/channels/laravel/carbon-adddays-but 수정 -without-modyfing-existing-instance)'$ end_date = $ start_date-> addDays ($ tier-> duration_days);' –

답변

3

$date->addDays 실제로 일을 추가 한 인스턴스를 반환하지 않으면 일 (큰 차이가 있음)을 수정 한 후 동일한 인스턴스를 반환합니다.

따라서 먼저 새 인스턴스에 날짜를 복사 한 다음 날짜를 추가해야합니다.

$start_date->copy()->addDays($tier->duration_days);