2017-01-14 4 views
-1

У меня есть следующий код, и я могу добавить к сегодняшней дате, но если существующая дата до сегодняшнего дня по-прежнему возвращает сегодняшнюю дату. Данные MySQL хранятся в виде строки y-m-d.Дата неправильная в функции PHP

$date = date('Y-m-d'); 
$oldate = "SELECT date FROM signup WHERE user='$user'"; 
$result1 = mysqli_query($connection, $oldate) or die(mysqli_error($connection)); 

if (strtotime($result1) < $date) { 
    $date1 = date('Y-m-d', strtotime("+$months months", strtotime($date))); 
} else { 
    $date1 = date('Y-m-d', strtotime("+$months months", strtotime($result1))); 
} 

ответ

1

Вы сравниваете значение временной метки ($ result1) с строки $ date1.You нужно отдать свой $ date1 в TIMESTAMP, а также. Измените, если условие, чтобы сделать его работу следующим образом:

if(strtotime($result1)<strtotime($date)) 
{ 

    .... 
} 
else 
{ 
    ..... 
} 
+0

Все еще не работает. – user7314100

0

Причина вы выше код не работает, потому что $result1 не будет дата. mysqli_query вернет экземпляр mysqli_result, когда вы выполнили успешный запрос выбора.

http://php.net/manual/en/mysqli.query.php:

Возвращает FALSE при неудаче. Для успешных запросов SELECT, SHOW, DESCRIBE или EXPLAIN mysqli_query() вернет объект mysqli_result. Для других успешных запросов mysqli_query() вернет TRUE.

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

$row = mysqli_fetch_assoc($result1); 
$rowDate = $row['date']; 

Кроме того, как Prada указал, вы не можете не сравнить даты в пути у вас есть в вашем вопросе, однако, вы могли бы сделать что-то вроде:

if (strtotime($rowDate) < strtotime($date)) 

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

$oldate = "SELECT date FROM signup WHERE user='$user'"; 
$result1 = mysqli_query($connection, $oldate) or die(mysqli_error($connection)); 
$row = mysqli_fetch_assoc($result1); 

$now = new DateTime; 
$date = new DateTime($row['date']); 

$date1 = $date < $now 
    ? $now->modify("+$months months")->format('Y-m-d') 
    : $date->modify("+$months months")->format('Y-m-d'); 

Надеюсь, это поможет!

+0

Все еще не работал. Вместо использования $ result1 в «mysqli_fetch_assoc («, вы имеете в виду $ oldate? – user7314100

+0

@ user7314100 Нет, потому что '$ oldDate' - это просто строка, а' mysqli_fetch_assoc' ожидает передачи экземпляра 'mysqli_result', который должен быть возвращен из 'mysqli_query'. Что вы получите, если вы добавите' die (print_r ($ row)), 'right под' $ row = mysqli_fetch_assoc ($ result1); '? –

+0

Я получаю - Array ([date] => 2017- 03-14) 1 – user7314100

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