2012-02-19 218 views
2

我有一個系統,是比較MySQL的提交討論今天的日期日期看某個文件是否需要更新:日期比較PHP的MySQL

<?php 
     $student_id = $row_student['student_id']; 

     $query_ieps = mysql_query("SELECT * FROM `iep` WHERE student_id = ".$student_id."") or die(mysql_error()); 

     $iep_count = mysql_num_rows($query_ieps); 

     $row_iep = mysql_fetch_assoc($query_ieps); 

     $today = date("d-m-Y"); 

     $iep_date = $row_iep['iep_renewal']; 

     $convert_iep_date = date("d-m-Y", strtotime($iep_date)); 

     $redate_coverted_date = $convert_iep_date; 

     if($iep_count == 0){ $iep_status = "No IEP on record"; $iep_td_status = "grey-alert"; } 
     elseif($today <= $redate_coverted_date) { $iep_status = "Due for Renewal"; $iep_td_status = "mid-alert"; } 
     elseif($today >= $redate_coverted_date) { $iep_status = "Up to Date"; $iep_td_status = "green-alert"; }; 
?> 

我有兩組值:

ID :1 - > iep_renewal:2012年12月2日

ID:2 - > iep_renewal:2012年12月8日

但是該表輸出,這兩個值是 「最新的」 當第一是明確不是。

有沒有辦法做到這一點,如果是這樣的話!

+0

'$ today'和'$ redate_coverted_date'的值是什麼? – 2012-02-19 21:25:57

+0

我想到的第一件事是,我總是認爲使用時間戳比較日期/時間會更好。所以只需將日期轉換爲時間戳。獲取當前的時間戳,然後這只是一個簡單的數學問題 – Crinsane 2012-02-19 21:27:15

+0

@Pekka $ today = 19-02-2012(今天的日期)和$ redate_converted_date = 12-02-2012(DB的日期) – 2012-02-19 21:30:31

回答

2

$今天= 19-02-2012(今天的日期)和$ redate_converted_date = 2012年12月2日(日期從DB)

您不能在格式比較日期:他們」我會比較爲字符串,而不是日期,導致不正確的結果。

使用strtotime()或​​將它們轉換成時間戳(或DateTime對象),你可以比較

3
$some_date_timestamp = strtotime('18-02-2011'); 

$current_timestamp = time(); 

echo ($some_date_timestamp < $current_timestamp) ? 'Old date' : 'Future date'; 
+0

你和Pekka的答案都有幫助,但我只能把一個作爲我接受的答案!謝謝 – 2012-02-19 21:45:38

+0

沒有問題!很高興我能幫上忙 – Crinsane 2012-02-19 21:50:23

1

作爲另一種可能性,你可以通過這樣的函數進行包裝,作爲UNIX時間戳出口直出的DB:

SELECT *, UNIX_TIMESTAMP(`iep_renewal`) AS iep_renewal_unix 

有可能是在包裝列相關的性能問題在大型數據集上運行。