2012-09-08 3 views
1

Я получаю DATETIME из базы данных, и мне нужно иметь возможность проверить, находится ли эта дата в течение 30 дней.PHP: проверить дату и время, чтобы узнать, подходит ли оно

$renewal_date = $row['renewal_date']; 
$current_time = new DateTime(); 
$interval = $renewal_date->diff($current_time); 

Это не работает для меня.

+0

ли '$ renewal_date' объект DateTime? – sachleen

+0

это DATETIME из запроса – dcolumbus

+0

strtotime - хорошее место для начала, я думаю http://php.net/manual/en/function.strtotime.php – Erik

ответ

2

Попробуйте что-то вроде этого

$renewal_date = new DateTime($row['renewal_date']); 
$cutoff= new DateTime('+31 days 00:00'); 


if ($renewal_date < $cutoff && $renewal_date >= new DateTime) 
    echo 'Renewal Time!'; 
else 
    echo 'All OK!'; 

Снимите & & условие, если вы хотите, чтобы показать обновление для дат в прошлом

+0

Я начинаю замечать недостаток ... шансы на то, что работа CRON может записаться на «30 дней», теперь она ничтожно мала. Итак, как я смогу поймать это обновление в разумных пределах? – dcolumbus

+0

Я не уверен, что вы имеете в виду? Я поднял свой ответ, чтобы всегда было полночь 30-го дня. Поэтому, если вы каждый день запускаете свой cron, он всегда будет хорошо проверять. помните, что это не < – Kris

+0

Да, то, что вы сделали выше, это именно то, что мне нужно! – dcolumbus

0
$renewal_date = strtotime($renewal_date); // maybe need it depending of sql format of date 

if (abs($renewal_date - time()) < 86400*30) 
{ 
    echo 'less than 30 days from now'; 
} 

EDIT 1

abs($renewal_date - time()) дает Lapsus времени от текущего момента (time()), что он должен относиться к будущему. на самом деле состояние может служить к прошлым периодам тоже ...

< 86400*30 говорит, что ляпсус должна быть ниже 30 дней ...

Это были мои 2 цента к делу :)

+0

что такое 86400? – dcolumbus

+0

86400 secs = 1 день –

+0

Секунд в день. Плохой способ сделать это сравнение ИМО. – sachleen

0

ли вы уверены, что $ row ['renewal_date'] является объектом DateTime?

Мое впечатление, что это значение, которое вы берете из базы данных, а не из объекта DateTime.

Попробуйте var_dump ($ RENEWAL_DATE), и если это строка, содержащая значение даты, вы должны использовать что-то вроде:

$renewal_date = new DateTime ($row['renewal_date']); 
$current_time = new DateTime(); 
$interval = $renewal_date->diff($current_time); 
0

$renewal_date не является объектом PHP DateTime. Вы можете сделать var_dump($renewal_date);, чтобы проверить это.

Ознакомьтесь с руководством по эксплуатации DateTime::diff. Вы хотите преобразовать свою дату в объект DateTime, используя что-то вроде этого:

$datetime1 = new DateTime($renewal_date); 

Тогда это должно сработать.

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