Сравнение дат PHP Mysql
У меня есть система, которая сравнивает даты, внесенные в таблицу 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"; };
?>
У меня есть два набора значений:
Идентификатор: 1 -> iep_renewal: 12-02-2012
Идентификатор: 2 -> iep_renewal: 12-08-2012
Однако таблица выводит, что оба эти значения являются "актуальными", когда первое явно не соответствует действительности.
Есть ли способ сделать это вообще, и если да, то как!
3 answers
$сегодня =19-02-2012 (сегодняшняя дата) и $redate_converted_date =12-02-2012 (дата из базы данных)
Вы не можете сравнивать даты в этом формате: они будут сравниваться как строки, а не даты, что приведет к неверным результатам.
Использовать strtotime()
или DateTime
чтобы преобразовать их в временные метки (или объекты DateTime
), которые вы можете сравнить.
$some_date_timestamp = strtotime('18-02-2011');
$current_timestamp = time();
echo ($some_date_timestamp < $current_timestamp) ? 'Old date' : 'Future date';
В качестве еще одной возможности вы можете экспортировать как метку времени unix прямо из БД, обернув ее в функцию, подобную этой:
SELECT *, UNIX_TIMESTAMP(`iep_renewal`) AS iep_renewal_unix
Могут возникнуть проблемы с производительностью, связанные с переносом столбцов в функции в больших наборах данных.