2015-09-08 3 views
2

Я сохранил свою дату в базе данных в формате d/m/y. Как я могу сравнить это с текущей датой? вот мой код. Но он не работает должным образом.Дата сравнения от базы данных с текущей датой

<!DOCTYPE html> 
<html> 
<body> 
<?php 
session_start(); 
include_once 'dbconnect.php'; 

date_default_timezone_set("Asia/Dhaka"); 
$t=time(); 
$d=date("d/m/Y"); 
$bar=date("l"); 
$time=date("h:i:sa"); 

$result=mysql_query("SELECT * FROM seminar WHERE date >= '$d'"); 
$cnt=mysql_query("SELECT COUNT(*) FROM seminar WHERE date >= '$d'"); 
$find=mysql_fetch_row($cnt); 
$num=$find[0]; 
while($uRow=mysql_fetch_assoc($result)) 
{ 
    echo "A Seminar on ".$uRow['about']." will be held in ".$uRow['place'] ."  at".$uRow['time'].",".$uRow['date']."<br><br>"; 
} 
//mysql_query("DLETE FROM seminar WHERE date < '$d'"); 
    ?> 
    </body> 
    </html> 
+0

Привет и добро пожаловать в переполнение стека! Пожалуйста, добавьте более подробную информацию - что-то «не работает» - это не очень полезная информация. Это дает какие-либо ошибки? Что оно делает? Что делать? – Anders

+0

Вы можете указать сохраненную дату в БД, чтобы мы могли видеть ее формат, вы написали форму БД d/m/y при сравнении d/m/Y * capital Y – alamnaryab

+0

Если вы можете, вы должны [прекратить использование 'mysql_ *' функций ] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). Они больше не поддерживаются и [официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). Узнайте о [подготовленном] (http://en.wikipedia.org/wiki/Prepared_statement) [заявлениях] (http://php.net/manual/en/pdo.prepared-statements.php) и рассмотрите возможность использования PDO , [это действительно не сложно] (http://jayblanchard.net/demystifying_php_pdo.html). –

ответ

3

Вам не нужно, чтобы получить дату в PHP, вы можете просто использовать SQL:

SELECT * FROM seminar WHERE date >= CURDATE() 

подробнее here.

Если ваши даты хранятся в виде строк (как кажется, кажется, ваш вопрос), а не как даты, вы должны рассмотреть возможность их хранения в качестве дат вместо этого. Если по какой-то причине это не вариант вы можете сделать это:

SELECT * FROM seminar WHERE STR_TO_DATE(date, '%d/%m/%Y') >= CURDATE() 

Кроме того, вы не должны использовать mysql_* функции, поскольку они являются устаревшими и уязвимы для SQL injection attacks. Вместо этого используйте MySQLi или PDO.

Кроме того, нет необходимости в дополнительном запросе, чтобы получить счет. Просто проверьте, сколько строк было затронуто первым запросом. Если вы используете MySQLi, используйте mysqli_affected_rows().

0

Его, потому что формат даты ('01/01/2015' меньше, чем '31/01/1970')

Я не могу проверить сейчас, но это должно работать:

$d=date("Y-m-d"); 
$result=mysql_query("SELECT * FROM seminar WHERE DATE_FORMAT(date,'%Y-%m-%d') >= '$d'"); 
$cnt=mysql_query("SELECT COUNT(*) FROM seminar WHERE DATE_FORMAT(date,'%Y-%m-%d') >= '$d'"); 
1
<!DOCTYPE html> 
    <html> 
    <body> 
    <?php 
    session_start(); 
    include_once 'dbconnect.php'; 

    date_default_timezone_set("Asia/Dhaka"); 
    $t=time(); 
    $d=date("d/m/Y"); 
    $bar=date("l"); 
    $time=date("h:i:sa"); 

    $result=mysql_query("SELECT * FROM seminar WHERE DATE_FORMAT(`date` , '%d-%m-%Y') <= '$d'"); 
    $cnt=mysql_query("SELECT COUNT(*) FROM seminar WHERE DATE_FORMAT(`date` , '%d-%m-%Y') >= '$d'"); 
    $find=mysql_fetch_row($cnt); 
    $num=$find[0]; 
    while($uRow=mysql_fetch_assoc($result)) 
    { 
     echo "A Seminar on ".$uRow['about']." will be held in ".$uRow['place'] ."  at".$uRow['time'].",".$uRow['date']."<br><br>"; 
    } 
    //mysql_query("DLETE FROM seminar WHERE date < '$d'"); 
     ?> 
    </body> 
    </html> 
Смежные вопросы