我有几个日期,有些是过去的,有些是未来的,我只想在这个列表的未来显示下一个日期。如果将来没有日期,我想回写一些文字。
我在中继器内使用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);