仅从多个日期中获取下一个日期

Get only the next date from multiple dates

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

我正在使用 ACF Date Picker inside a 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');
  }
}

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

你可以比较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);

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

请查看下面的代码。

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;