2012-02-19 159 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 

有可能是在包装列相关的性能问题在大型数据集上运行。