2016-07-27 1 views
2

범위 쿼리를 작성 중이며 fetch_date을 전달하여 created_at 타임 스탬프를 기반으로 DB 테이블의 항목을 가져옵니다.변수를 업데이트 할 때 Laravel 날짜가 변경됨

는 한 달에 대한 모든 기록을 찾기 위해 노력하고있어,하지만 난 다음 시도 할 때마다 변수 $fetch_date은 변화하고 계속 :

//$fetch_date is a carbon instance and is equal to the month the user selected 
    //ie: Carbon {#221 ▼ 
    // +"date": "2016-07-01 00:00:00.000000" 

    //Create the next_month 
    $next_month = $fetch_date->addMonth(); 
    //Format next_month as a string 
    $next_month = $next_month->format('Y-m-d'); 
    //Format fetch_date as a string 
    $fetch_date = $fetch_date->format('Y-m-d'); 

    dd($fetch_date); 
    //This now gives me 2016-08-01 - why? 

가 왜 fetch_date 변화를합니까? 나는 실질적으로 $fetch_date을 현재 달로 잡고 $next_month을 단순히 다음 달의 시작으로 유지하려고합니다.

저는이 사실에 대한 간단한 이유가 있습니다. 나는 그저 내려다보고 있습니다.

+0

fetch_date 변수에 한 달 추가하는 것으로 보입니다. 복사 한 다음 월을 추가하십시오. –

답변

1

도움이 될 것 addMonth 방법은 부작용이 호출 때문입니다.

는 탄소의 source 보면, 모든 addMonth 차례로 단순히 DateTime::modify를 호출 한 값으로 addMonths를 호출하고있는 것을 볼 수 있습니다. 그것은 명시 적으로 문서에서 철자하지만, 예로부터이 메소드를 호출하면 저장된 시간 값 수정 꽤 평범 아니에요 :

예 # 1 날짜 시간을 :() 예 수정

<?php 
$date = new DateTime('2006-12-12'); 
$date->modify('+1 day'); 
echo $date->format('Y-m-d'); 
?> 

이 문제를 방지하려면 시간을 복사하여 수정하십시오.

$also_fetch_date = clone $fetch_date; 
$next_month = $also_fetch_date->addMonth(); 
// ... 
+0

흥미 롭습니다. 계속. 철저한 설명에 감사드립니다. 지금 나는 문제를 해결하기 위해 귀하의 시정을 이해하고 있습니다. – Hanny

+1

어, 왜 월/복제 객체를 추가할까요? 단순히 원하는 효과를 얻기 위해 PHP의 strtotime을 사용할 수 있었을 때입니다. 한편으로 Carbon에서'-> copy' 메서드를 사용하여 한 줄로 처리 할 수도 있습니다. –

0

fetch_date 변수에 한 달 추가하는 것으로 보입니다.

이 시도 :

$next_month = Carbon::createFromFormat('Y-m-d', $fetch_date->format('Y-m-d')); 
$next_month->addMonth(); 

dd($next_month->format('Y-m-d')); 

는 탄소의 문서에서 살펴 보자 : http://carbon.nesbot.com/docs/ 어쩌면 당신에게

+0

좋아, 나는 그것을 시도했다. * 미친 * 이유에 대해, 당신이 여기서 한 일로 변경 한 후에도 - $ fetch_date는 여전히 변경됩니다. 어쩌면 내 브라우저가 뭔가 이상하게 캐싱하지 않는지 궁금합니다. 어떻게 가능할 지 모르기 때문에 ... – Hanny

+0

next_month라는 새로운 탄소 객체를 만드는 새로운 솔루션을 시도하십시오. –

관련 문제