2013-12-11 4 views
0

ok в основном я пытаюсь сравнить сегодняшний день с датой базы данных и определить, является ли сегодня дата> затем одной из дат в базе данных. но независимо от того, какая дата взята из базы данных < или> по сравнению с сегодняшним, результат всегда верен.PHP сравните даты

Может кто-нибудь мольбы взглянуть на мой код и указать любые потенциальные проступки пожалуйста

PHP

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

$sql="SELECT enddate FROM campaigns WHERE id=".$data['camp']; 
    $query = mysqli_query($db, $sql); 

while($result = mysqli_fetch_assoc($query)){ 
    if($timestamp > $result){ 

     echo "<script type='text/javascript'>alert('This Workshop Has Expired');</script>"; 
     exit; 
    }else{ 

     echo "<script type='text/javascript'>alert('Thank You For Registering');</script>"; 
     exit; 
    } 
} 
+0

В вашей базе данных, как вы храните "ENDDATE"? Вы должны использовать временные метки для этого на самом деле, и глядя на то, как вы делаете «$ timestamp» var. Я предполагаю, что вы этого не делаете. – James

+0

if ($ timestamp> $ result) {?? как php знает, что это «дата»? конвертировать в целое число с использованием strtotime, а затем проверить. в реальных приложениях используется класс datetime. – Stewie

ответ

1
if($timestamp > $result['enddate']){ 

$ результатом является массив, как назвали $result = mysqli_fetch_assoc($query). mysqli_fetch_assoc возвращает массив с именем столбца вашей строки в виде ключей и содержимым каждого поля в качестве значения.

+0

owww loool это работает, но когда я сделал var_dump для каждой переменной $ timestamp и $ results, цифры выглядели корректно и соответствовали как базе данных, так и сегодняшней дате, sorr, если это хронический вопрос, но не могли бы вы объяснить мне, почему мне нужно было добавить $ result ['enddate'] – Tomazi

3

Попробуйте, например:

$var = "2010-01-21 00:00:00.0"//date from DB 
strtotime($var); 

Это превращает его в значение времени, а также:

time() - strtotime($var); 

дает вам секунд с момента $var

Чтобы проверить $var был в в последний раз:

if((time()-(60*60*24)) < strtotime($var)) 

Вот и все! :)

+0

Эй, оба формата одинаковые yyyy-mm-dd, – Tomazi

+0

и да, я пробовал var_dump, оба формата выглядели так же, как и я попытался strtotime, проблема казалась в моем случае, если вы хотите, но спасибо вы за помощь – Tomazi

0

Вы должны изменить, если заявление, как показано ниже:

if(strtotime("now") > strtotime($result['enddate'])){ 
1

Проблема заключается в том, что «EndDate» из базы данных не является числом, это строка.

Вы должны преобразовать его номера:

$now = time(); 
$sql="SELECT enddate FROM campaigns WHERE id=".$data['camp']; 
$query = mysqli_query($db, $sql); 
while($result = mysqli_fetch_assoc($query)){ 
    $db = strtotime($result); 
    if($now > $db) { 
     // expired 
     echo "<script type='text/javascript'>alert('This Workshop Has Expired'); </script>"; 
     exit; 
    } 
    else { 
     // not expired 
     echo "<script type='text/javascript'>alert('Thank You For Registering');</script>"; 
     exit; 
    } 
} 
Смежные вопросы