2016-07-29 3 views
0

예를 들어 7 월 6 일에 해당하는 특정 날짜가 있습니다.이 숫자는 2016 년 27 번째 주에 해당합니다. PHP 5.5.9를 사용하여 해당 주에 발생한 7 개의 날짜를 다음 함수를 사용하여 반환하려고합니다. 2016-, 2016년 7월 4일 :PHP에서는 증가 작업을 수행하지 않고 변수와 조합하여 증가 연산자를 어떻게 사용합니까?

function getStartAndEndDate($week, $year) { 
    $i=0; 
    $dto = new DateTime(); 
    $ret[$i] = $dto->setISODate($year, $week)->format('Y-m-d'); 
    $i++; 
    while ($i < 7){ 
     $ret[$i] = $dto->modify('+' . $i . ' days')->format('Y-m-d'); 
     $i++; 
    } 
    return $ret; 
} 

나는 다음과 같은 날짜를 수신하고, 대신 2016년 7월 10일

에 2016년 7월 4일에서 7 연속 날짜 목록을 기대하고있다 07-05, 2016-07-07, 2016-07-10 2016-07-14 2016-07-19, 2016-07-25

나는 내 문제의 원인은 다음과 같습니다.

$ret[$i] = $dto->modify('+' . $i . ' days')->format('Y-m-d'); 

정적 값을 지정하면 코드가 작동합니다.

의견이나 통찰력을 주시면 감사하겠습니다.

는 이전 반복에서와 동일한 $dto 값을 취급하지 않는 다음 반복에 있도록

+0

감사합니다. Tejaswi 및 Trincot. 귀하의 설명 모두 도움이되었습니다. –

답변

0

난 그냥 1

귀하의 줄을 사용 : 당신은 그냥 일일마다 시간을 추가 할 수

그래서

은, 실제로, 당신의 작업을 간단하게 이다

$ret[$i] = $dto->modify('+' . $i . ' days')->format('Y-m-d'); 

사용

$ret[$i] = $dto->modify('+1 days')->format('Y-m-d'); 

이 이유는 수정 기능을 사용하면 날짜 개체 자체를 수정하기 때문입니다. 따라서 처음에 날짜가 2016-07-04 일 경우 modify ("+ $ i days") [$ i = 1]을 사용하면 2016-07-05가되지만 다음 단계에서 수정 ("+ $ i 일" i days ") [$ i = 2] 2016 년 7 월 5 일부터 계산되며 2016 년 7 월 7 일에 제공되며 앞으로도 계속 진행될 것입니다.

3

modify 방법은 정말 $dto을 수정 감사드립니다. 대신 $ 사용하는 아래의 줄에

$ret[$i] = $dto->modify('+1 days')->format('Y-m-d');