只获取多个日期中的下一个日期


Get only the next date from multiple dates

我有几个日期,有些是过去的,有些是未来的,我只想在这个列表的未来显示下一个日期。如果将来没有日期,我想回写一些文字。

我在中继器内使用ACF日期选择器。首先,我想我必须得到当前的日期,以便与其他日期进行比较:

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');
  }
}

如何获取get_field('repeater_field_name')值中的所有the_sub_field('repeater_date_field')?我如何检测它的行(用于将其他子字段添加到同一行)?

您可以将所有日期存储在数组中。然后按升序排序。然后从列表中选择比今天大的第一个日期。

请查看下面的代码。

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;

您可以比较两个日期来解决此问题。例如

$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);