2015-05-05 4 views
4

Я хочу просмотреть даты и время моей базы данных и сравнить их с текущей датой и временем и сказать, какой из них больше.Mysql Сравнение дат, хранящихся на сегодняшний день

<?php 
include_once("db.php"); 
$date = new DateTime(); 
//echo $date->format('Y-m-d H:i:s') 

$query = "SELECT timedate, email FROM mailer"; 
$result = mysql_query($query); 
echo "<table>"; 
while($row = mysql_fetch_array($result)){ 
     $tot = $row['timedate']; 
     $ema = $row['email']; 
    if($tot > $date) { 
    //echo "<tr><td>" .$row['timedate']."</td><td>"; 
    echo"database dates higher then now dates" . "<br>"; 
    echo "<tr><td>" .$row['email']."</td><td>" ."<br>"; 
    echo "<tr><td>" .$row['timedate']."</td><td>" ."<br>"; 
} 
else { 
    echo"database dates lower then now dates" . "<br>"; 
    echo "<tr><td>" .$row['email']."</td><td>". "<br>"; 
     echo "<tr><td>" .$row['timedate']."</td><td>" ."<br>"; 
} 

} 
mysql_close(); 
?> 

Вот результат теста, который я получаю:

database dates lower then now dates 
[email protected] 
2015-05-04 08:00:00 
database dates lower then now dates 
[email protected] 
2015-05-04 00:00:00 
database dates lower then now dates 
[email protected] 
2015-05-30 00:00:00 

Как вы можете видеть, что последняя запись является неправильной, его набор на 30 может поэтому она должна быть выше, чем на сегодняшний день в настоящее время. Я предполагаю, что я не правильно использую текущую дату, и мне нужно отформатировать ее.

+0

Каков тип данных 'timedate'? –

+0

тип datetime – alkokarko

ответ

5

Поскольку timedate является datetime в PHP вы можете просто использовать strtotime

if(strtotime($tot) > time()){ 

}else{ 

} 
+0

yep, thx для решения, с которым он работал – alkokarko

0

Вы не можете сравнить даты на этом пути. Вы должны преобразовать их в timestamp first.Try с -

if(strtotime($tot) > strtotime($date)) 
1

Вы должны сначала форматировать результат базы данных в качестве даты, прежде чем сравнивать их.

<?php 
include_once("db.php"); 
$date = new DateTime(); 
//echo $date->format('Y-m-d H:i:s') 

$query = "SELECT timedate, email FROM mailer"; 
$result = mysql_query($query); 
echo "<table>"; 
while($row = mysql_fetch_array($result)){ 
     $tot = DateTime::createFromFormat("Y-m-d H:i:s",$row['timedate']); 
     $ema = $row['email']; 
    if($tot > $date) { 
     echo"database dates higher then now dates" . "<br>"; 
     echo "<tr><td>" .$row['email']."</td><td>" ."<br>"; 
     echo "<tr><td>" .$row['timedate']."</td><td>" ."<br>"; 
    } else { 
     echo"database dates lower then now dates" . "<br>"; 
     echo "<tr><td>" .$row['email']."</td><td>". "<br>"; 
     echo "<tr><td>" .$row['timedate']."</td><td>" ."<br>"; 
    } 

} 
mysql_close(); 
?> 
0

if($tot > $date) вы не можете напрямую сравнивать datatime значения, вы должны преобразовать оба значение времени первым.

$dateTick = strtotime($date); $totTick = strtotime($tot);

После этого только сравнить

if($dateTick < $totTick)

0

Это, вероятно, менее подвержены ошибкам и потенциально более эффективным, чтобы база данных сделать это.

SELECT timedate, (timedate < NOW()) AS earlier, email FROM mailer; 

Это возвращает новый «столбец» под названием «ранее», сгенерированный на лету, говорить вам, какие даты ранее с «1» (истинно) или нет, с «0» (ложь) , или NULL, если timedate были null.

Вы также можете получить snazzy с выражением CASE, объединив несколько логических тестов для получения новой информации. Эти операции, как правило, чрезвычайно быстрые в MySQL.

Смежные вопросы