我想弄清楚如何计算一个经常性时间的给定日期之后的最近日期.
例如,如果经常性周期是每两周一次,从2016年1月1日开始,给定日期是1月17日,我如何计算下一个经常性日期是1月28日?
经常性的时期可以是任何天数,周数,月数或年数.
现在,我能想到的唯一解决方案是从开始日期和循环开始,在每次迭代中添加重复周期,直到我通过给定日期,但我想知道是否有更高效或更优雅的解决方案?
您可以使用DatePeriod来完成它:
$begin = new DateTime('2016-01-01');
$end = new DateTime('2016-12-31');
$interval = new DateInterval('P14D');
$datePeriod = new DatePeriod($begin, $interval ,$end);
$givenDate = new DateTime('2016-01-17');
foreach ($datePeriod as $date) {
if ($date < $givenDate) {
continue;
}
echo 'The next recurring period date is ' . $date->format('Y-m-d');
break;
}
Run Code Online (Sandbox Code Playgroud)
输出将是:
下一个重复周期日期是 2016-01-29
如果您持开放态度并且不介意数据库选项和迷你 cron 脚本,我有一个建议。创建一个名为 recurring_track 的表并具有键值列:
例如:
last_recurring_period 作为键和值是 05-25-2016
现在运行一个 cron 脚本,以便在每次重复持续时间发生时更新它。
现在,您只需查询此表即可确定上一个重复周期是什么时候,以及下一个周期是什么时候,以及您可以添加和确定的给定日期。
| 归档时间: |
|
| 查看次数: |
484 次 |
| 最近记录: |