[英]PHP MYSQL date range missed days
在DB中,還有26天和31天,但沒有更改為OK。 僅獲得第三天,然后更改為“確定”。
我在此代碼中哪里寫錯了?
碼:
*$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-07-01 ---錯過了
2016-07-02 ---錯過了
2016-07-03 ---好的
2016-07-04 ---錯過
2016-07-05 ---錯過
2016-07-06 ---錯過了
2016-07-07 ---錯過了
2016-07-08 ---錯過了
2016-07-09 ---錯過了
2016-07-10 ---錯過了
2016-07-11 ---錯過了
2016-07-12 ---錯過了
2016-07-13 ---錯過了
2016-07-14 ---錯過了
2016-07-15 ---錯過
2016-07-16 ---錯過了
2016-07-17 ---錯過了
2016-07-18 ---錯過了
2016-07-19 ---錯過了
2016-07-20 ---錯過了
2016-07-21 ---錯過了
2016-07-22 ---錯過
2016-07-23 ---錯過了
2016-07-24 ---錯過了
2016-07-25 ---錯過了
2016-07-26 ---錯過了
2016-07-27 ---錯過了
2016-07-28 ---錯過了
2016-07-29 ---錯過了
2016-07-30 ---錯過了
2016-07-31 ---失蹤
您的問題很難理解,但據我所知,您正在嘗試檢查是否有重復日期的記錄。
您錯過的要點是,您只在$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
*/
在此代碼部分之后,您的“確定”檢查僅對“ 2016-07-03”有效。 要更正代碼,您應該具有存儲所有天數的數組,並使用in_array()
函數檢查是否存在。
另一種選擇是在更改ORDER BY方向后在while循環內應用這些過程。 如果兩個連續的記錄不是連續的天,則將填補這些間隔(第二級)迭代。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.