2015-02-08 4 views
0

У меня есть пользовательское поле expirydate, которое сделано из acf в качестве выбора даты ... с нижним кодом i m, пытающимся удалить сообщение tht, истекло ... по какой-то причине код не работает.проверка даты всегда возвращает false

$arg= get_posts(array('post_type' => tokens, 'numberposts' => -1)); 
foreach ($arg as $post) : setup_postdata($post); 
if (!empty($post)) 
    { 
$expiry=get_field('expiry',$post->ID); 
$today=date("d/m/Y"); 
if ($today>$expiry) { 
echo $expiry."expired <br>"; 
wp_delete_post($postid); 
} 
else { 
echo "not expired"."<br>"; 
} 
} 
endforeach; 
echo "process completed"; 
?> 

условие $today>$expiry всегда возвращается ложный

+0

Я бы преобразовал строку в временные метки UNIX и сравнил их. Вы можете использовать эту функцию для преобразования http://php.net/manual/ru/function.strtotime.php – Tamara

ответ

2

Вы сравнения строк, а не даты. Таким образом, 31/1/2014 больше, чем 01/12/2014 поскольку 3> 1 когда сравнение строк.

Чтобы правильно сравнить даты, используйте либо строковый формат, который сопоставим, либо используйте DateTime() объекты, сопоставимые.

$expiry = DateTime::createFromFormat('d/m/y', get_field('expiry',$post->ID)); 
$today = new DateTime(); 
if ($today > $expiry) { 

Советую против использования strtotime() для сравнения дат, как это делает не сбережения дневного света принимают во внимание.

+0

отличный совет, не знал этого. – FloydThreepwood

+0

это дает мне ошибку ... plz not expirydate сохраняется в сообщении, используя acf имеет формат «dd/mm/yy» – user3117694

+0

может помочь мне с http://support.advancedcustomfields.com/forums/topic/list -all-values-in-select-field/ – user3117694