我想获取一个时间段内的日期数组。为此,我想出了一个 for 循环(看起来很简单......但是当我运行它时,即使是 1 个月的日期,它也会超时。
这是我的 php:
$startdate = '2018-01-31';
$recurring = '2';
switch($recurring) {
case '1':
$period = '+1 day';
break;
case '2':
$period = '+1 week';
break;
case '3':
$period = '+1 month';
break;
case '4':
$period = '+3 months';
break;
case '5':
$perion = '+1 year';
break;
default:
$period = null;
break;
}
$dates = [];
if($period !== null) {
for($date = $startdate; $date < strtotime('+1 month', $startdate); strtotime($period, $date)) {
$dates[] = $date;
}
}
echo json_encode($dates);
在 for 循环的增量部分中增加$date
$date = strtotime($period, $date)
应该可以防止它超时,但还可以进行其他一些改进。
首先,我建议在循环之前计算一次结束日期,以避免每次检查继续条件时进行额外的strtotime
调用。
$end = strtotime("$startdate +1 month");
然后,在初始化部分中设置$date = strtotime($startdate)
,否则您将获得一个日期字符串而不是时间戳作为$dates
数组中的第一个值。
for ($date = strtotime($startdate); $date < $end; $date = strtotime($period, $date)) {
$dates[] = $date;
}