2014-10-09 445 views
0

我正在處理一個項目,其中sql表中的日期需要使用當前日期進行檢查。如果故障單超過當前日期,則故障單的狀態從活動狀態變爲過期狀態。
我不擅長php。這是我想出的。我在頁面頂部寫了這個函數,這樣每次頁面加載時,它都會檢查日期並進行比較。日期格式是yyyy-mm-dd
我在做什麼錯。任何人都可以請幫我嗎?

將sql表中的日期與當前日期進行比較

$result= "SELECT date, status FROM TABLE1"; 

    while($row = sqlsrv_fetch_array($result)){ 

    if(strtotime($row['date']) > strtotime(date('Y-m-d'))){ 

$updatequery = " UPDATE TABLE1 SET $row[status] = 'Expired' "; 

}} 
+0

$ row ['date']是正確的 – Nickool 2014-10-09 21:05:51

+0

感謝您的快速回復,但這並沒有解決問題。 – bktff 2014-10-09 21:09:35

+0

$ row ['status']也 – Nickool 2014-10-09 21:09:57

回答

2

我會建議使用它的日期DIFF功能的PHP DateTime類,所以你可以實現這樣的

$today = new DateTime('today'); 
$expires = new DateTime($datefromdb); 
$diff = $today->diff($expires); 
if($diff < 1) 
{ 
    $updatequery = " UPDATE TABLE1 SET $row[status] = 'Expired' "; 
} 
+0

或者如果你的MySQL服務器有正確的日期/時間,你可以使用['NOW()'](http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions .html#function_now)在您的查詢中。 – 2014-10-09 21:13:43

0

您可以使用

$result= "SELECT UNIX_TIMESTAMP(date) AS unixdate, status FROM TABLE1"; 

,然後比較

if ($row['unixdate']) > strtotime(date('Y-m-d'))) 
0

您的sql數據庫可能位於服務器上,其時間與您運行代碼的機器上的時間不同,因此我建議您在sql服務器端執行檢查並更新所有數據。

(聲明:我用mysql,所以這是怎麼我寫我的答案我想你可以轉化爲你使用任何SQL數據庫)

我會建議使用MySQL的日期函數,你可以看到here

UPDATE TABLE1 SET status='Expired' WHERE DATEDIFF(CURDATE(), date) < 0 
相關問題