如何在给定日期(PHP)之后计算经常性周期的最近日期

Ben*_*ess 6 php date

我想弄清楚如何计算一个经常性时间的给定日期之后的最近日期.

例如,如果经常性周期是每两周一次,从2016年1月1日开始,给定日期是1月17日,我如何计算下一个经常性日期是1月28日?

经常性的时期可以是任何天数,周数,月数或年数.

现在,我能想到的唯一解决方案是从开始日期和循环开始,在每次迭代中添加重复周期,直到我通过给定日期,但我想知道是否有更高效或更优雅的解决方案?

Mat*_*hai 5

您可以使用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


cha*_*ool 0

如果您持开放态度并且不介意数据库选项和迷你 cron 脚本,我有一个建议。创建一个名为 recurring_track 的表并具有键值列:

例如:

last_recurring_period 作为键和值是 05-25-2016

现在运行一个 cron 脚本,以便在每次重复持续时间发生时更新它。

现在,您只需查询此表即可确定上一个重复周期是什么时候,以及下一个周期是什么时候,以及您可以添加和确定的给定日期。