2013-10-14 2 views
0

Я пытаюсь преобразовать следующий код MYSQL SELECT в код php: DATEDIFF(date, NOW()) <= 31 basicaly, если дата меньше или равна 31 дней.Функция создания DATEDIFF для php-кода

До сих пор, что я сделал это следующий

$today = new DateTime('now'); 
$date = $row['date']; 
$diff = date_diff($date,$today); 

и чем внутри, если цикл у меня есть условие: if ($diff <= 31)

Моя колонка дата Sql только указывается как дата не DateTime я получаю следующее сообщение об ошибке, и мне интересно, как я могу получить вычислили дату только

Warning: date_diff() expects parameter 1 to be DateTime, string given in D:\xampp\htdocs\website\c.php on line 299 
bool(false) 
Warning: date_diff() expects parameter 1 to be DateTime, string given in D:\xampp\htdocs\website\c.php on line 299 
bool(false) 

ДОПОЛНИТЕЛЬНАЯ информация, которая делает ответы пыльник, чтобы не быть горе rking заключается в том, что в моем SQL-запросе я форматирую дату с DATE_FORMAT(date,'%d %b %Y') as date

Любая помощь будет очень желанной. Благодаря!

+2

что такое значение '$ row ['date']'? – PlantTheIdea

+0

строка (11) «04 сентября 2013» строка (11) «12 декабря 2013» строка (11) «12 декабря 2013» –

ответ

2

Вам необходимо преобразовать данные базы данных в DateTime объекта, а также, прежде чем делать date_diff() на нем.

$today = new DateTime('now'); 
$date = new DateTime($row['date']); 
$diff = date_diff($date,$today); 

Теперь понимаю, что поскольку $diff является DateInterval объект, и вы заботитесь только о компоненте дней, вы можете оценить, как это:

if ($date->days <= 31) { 
    // do something 
} 
+0

выглядит интересным решением, но после того, как запрос выбирает дату, вот что находится внутри строки $ row [ 'date'] string (11) «04 Sep 2013» строка (11) «12 декабря 2013» строка (11) «12 декабря 2013», которая формируется с DATE_FORMAT (дата, «% d% b% Y») в качестве даты –

+1

Этот формат даты напрямую не принимается конструктором DateTime. У вас есть несколько вариантов. Вы можете удалить 'DATE_FORMAT' из запроса. Вы можете изменить 'DATE_FORMAT' в запросе в соответствии с одним из поддерживаемых напрямую - см. Ссылку http://www.php.net/manual/en/datetime.formats.date.php. Вы можете использовать '$ date = DateTime :: createFromFormat ('d M Y', $ row ['date'])' для создания объекта DateTime для сравнения. –

1

Try:

$today = new DateTime('now'); 
$date = new DateTime($row['date']); 
$diff = $date->diff($today)->days; 

date_diff ожидает оба аргумента, чтобы быть DateTime объекты. Это то, о чем он жалуется. date_diff или Datetime :: дифференциалов возвращает DateInterval, вы можете получить дни от члена дней переменной

0

Вот алгоритм:

$then = new DateTime('2010-05-30');//example, you could use $row['date'] 
    $now = new DateTime();//now 
    $delta = $now->diff($then); 

    $data = array(
     'year' => $delta->y, 
     'month' => $delta->m, 
     'day' => $delta->d, 
     'hour' => $delta->h, 
     'minute' => $delta->i, 
     'second' => $delta->s 
    ); 

    //now 
    if($data['day'] <= 31) 
    { 
     //do the stuff 
    } 
+0

Ошибка gettin в коде $ days: Примечание: неопределенная переменная: годы в D: \ xampp \ htdocs \ website \ c.php в строке 296 Примечание: неопределенная переменная: месяцы в D: \ xampp \ htdocs \ website \ c. php on line 296 Примечание: неопределенная переменная: годы в D: \ xampp \ htdocs \ website \ c.php в строке 296 ошибка: $ days = floor (($ diff - $ years * 365 * 60 * 60 * 24 - $ months * 30 * 60 * 60 * 24)/(60 * 60 * 24)); // вычисляем –

+0

@JohnSiniger, извините, я редактировал код. :) – user2877011

+0

результат $ days is float (0) float (0) float (0) –

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