2015-12-18 2 views
3

У меня есть несколько дат, некоторые из прошлых, некоторые из будущих, и я хочу показать только следующую дату в будущем этого списка. Если в будущем нет даты, я хочу повторить текст.Получить только следующую дату из нескольких дат

Я использую ACF Date Picker внутри Repeater. Прежде всего, я думаю, что я должен получить текущую дату, чтобы сравнить его с другими:

date_default_timezone_set('Europe/Berlin'); 
$date = date('Ymd', time()); 

Я выбрал формат Ymd, поскольку повторитель выдает даты точно так же. Теперь мне нужно как-то проверить все подполя внутри моего ретранслятора. Я предполагаю, что это делается с помощью так или иначе, как

$rows = get_field('repeater_field_name'); 
if($rows) { 
    foreach($rows as $row) { 
    // compare the dates, choose only the next coming date 
    // dates are stored in the_sub_field('repeater_date_field'); 
    } 
} 

Как я могу получить все the_sub_field('repeater_date_field') моих get_field('repeater_field_name') ценностей? И как я могу определить его строку (для добавления других подполей в ту же строку)?

ответ

4

Вы можете хранить все даты в массиве. Затем отсортируйте его в порядке возрастания. Затем возьмите первое свидание из списка, который больше, чем сегодня.

Пожалуйста, ознакомьтесь с нижеприведенным кодом.

date_default_timezone_set('Europe/Berlin'); 
$date = date('Ymd', time()); 

$dates = array(); 
$rows = get_field('repeater_field_name'); 
if($rows) { 
    foreach($rows as $row) { 
     $dates[] = $row->date_field; 
    // compare the dates, choose only the next coming date 
    // dates are stored in the_sub_field('repeater_date_field'); 

    } 
} 
sort($dates); 
$final_date = ""; 
foreach($dates as $date_row){ 
    if($date_row > $date){ 
     $final_date = $date_row; 
     return true; 
    } 
} 
echo $final_date; 
0

Вы можете сравнить 2 даты, чтобы решить эту проблему. Например

$date_bef = strtotime("151218"); // December 18, 2015 
$date_after = strtotime("151219"); // December 19, 2015 
if($date_after - $date_bef == 1) 
echo "This is a next day"; 

Если вы не хотите сравнить, вы можете добавить 1 день к существующему времени, например,

$next_day = date("Ymd",strtotime("151220") + 60*60*24); 
Смежные вопросы