2016-07-28 2 views
0

일을 놓쳤습니다. 또한 26 일과 31 일이 있지만 확인으로 변경되지 않았습니다. 3 일만 걸리고 확인으로 변경하십시오.PHP MYSQL 날짜 범위가 DB에

어디에서이 코드가 잘못 되었습니까?

코드 :

*$from = date("Y-m-01"); 
$to  = date("Y-m-t"); // last day current month 
$query = "SELECT date FROM tbl_data WHERE date BETWEEN '$from' AND '$to' order by date DESC"; 
$result = mysqli_query($mysqli,$query); 
while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) 
{ 
    $date = date_create_from_format('Y-m-d', $row['date']); 
} 
$cursor = date_create_from_format('Y-m-d', $from); 
$finish = date_create_from_format('Y-m-d', $to); 
while ($cursor != $date) 
    { 
     echo date_format($cursor,'Y-m-d') . "--- Missed <br>"; 
     date_modify($cursor, '+1 day'); 

      while($cursor == $date) 
       { 
        echo date_format($date,'Y-m-d') . "--- OK <br>"; 
        date_modify($cursor, '+1 day'); 
       } 
      while($cursor > $finish) 
       { 
        die(); 
       } 
}* 

출력 :

2016년 7월 1일 ---
2016년 7월 2일 부재 --- 확인 ---
2016년 7월 3일 부재
2016년 7월 7일 부재
2016년 7월 6일 부재
2016년 7월 5일 부재
2016년 7월 4일는 --- --- --- ---
,536을 누락 부재중
2016년 7월 11일 부재
2016년 7월 10일 부재
2016년 7월 9일 부재2016년 7월 8일 --- --- --- ---
2016년 7월 12일 --- ---
2016년 7월 13일 부재
2016년 7월 14일 부재 ---
2016년 7월 15일 부재 ---
2016년 7월 16일 부재 ---
부재
2016년 7월 20일 부재
2016년 7월 19일 부재
2016년 7월 18일 부재 2016년 7월 17일는 --- --- --- ---
을 누락 부재중
2016년 7월 24일 부재
2016년 7월 23일 부재
2016년 7월 22일 부재 691,363,210 2016년 7월 21일 --- --- --- ---
2016년 7월 25일 --- ---
2016년 7월 26일 부재
2016년 7월 27일 부재 ---
2016년 7월 28일 부재 ---
2016년 7월 29일 부재 ---
부재 2016-07-30 --- 놓친
2016-07-31 --- 놓친

+3

내가 묻는 것을 얻지 못했지만 질문을 자세히 작성하십시오. – Janno

+0

첫 번째 while 루프를 닫지 말고 닫으십시오. – Rijin

+0

변하지 않았습니다. 시도했습니다. –

답변

0

당신의 질문은 이해하기 힘들지 만, tand, iterated date에 대한 레코드가 있는지 없는지 확인하려고합니다.

당신이 놓친 요점은, 당신은 변수 $date에 단 하나의 날짜 만 저장하고 있다는 것입니다. 명확히하기; 이 코드 부분 후

while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) 
{ 
    $date = date_create_from_format('Y-m-d', $row['date']); 
} 

/* at this point of code, your variable $date is exactly equal to 2016-07-03 
* because you sorted all existing dates in descending order and last record is 2016-07-03 
*/ 

, 당신의 "OK"검사는 "2016년 7월 3일"인 경우에만 유효합니다. 코드를 수정하려면 모든 요일을 저장하고 in_array() 함수를 사용하여 존재 여부를 확인하는 배열이 있어야합니다.

또 다른 대안은 ORDER BY 방향을 변경 한 후 루프 동안이 절차를 적용하는 것입니다. 두 개의 연속 된 레코드가 연속 일이 아니라면, 이러한 갭 (두 번째 레벨) 반복을 채울 것입니다.