PHP:根据固定的基准日期获取下一个日期

时间:2014-05-08 10:52:19

标签: php date datetime date-arithmetic

有没有办法在PHP中使用给定日期的4周间隔来获取下一个日期?

示例:

我的开始日期是2014年1月3日星期五,我的间隔时间是该日期后的每4周。 我正在寻找的是与当前日期相匹配的下一个日期(如果可能的话,日期,如果可能的话)。 在上面的示例中,这将是2014年5月23日星期五(2014年6月20日,2014年7月18日等)。

我知道我可以按如下方式获取当前日期:$today = date('Y-m-d');

我可以像这样设置开始日期:$start = date('2014-01-03');

但我不知道如何计算间隔以及如何找出下一个匹配的日期。

3 个答案:

答案 0 :(得分:1)

您应该阅读DateTime课程,特别是DatePeriodDateInterval

$start = new DateTime('2014-01-03');
$interval = DateInterval::createFromDateString('4 weeks');
$end = new DateTime('2015-12-31');

$occurrences = new DatePeriod($start, $interval, $end);

foreach ($occurrences as $occurrence) {
    echo $occurrence->format('Y-m-d') . PHP_EOL;
}

DatePeriod采用开始日期和DateInterval,并允许您遍历对象以使用给定间隔获取边界内的所有日期。截止时间可以是设定的周期数(因此接下来的10个日期)或结束日期(如上所述),即使结束日期不是间隔所在的日期之一(它将在其下方停止)。或者你可以使用8601 interval notation字符串(这听起来很有趣,是吧?),但我对此非常不满意。

答案 1 :(得分:0)

如果4周间隔意味着7 x 4 = 28天,您可以通过以下方式获取“下一个日期”:

$today = new DateTime();
$next_date = $today->add(new DateInterval('P28D'));
$next_next_date = $next_date->add(new DateInterval('P28D'));
$next_next_next_date = $next_next_date->add(new DateInterval('P28D'));

如果您想计算更多“下一个日期”,可以重复add()重复添加28天到您的日期。

注意:除了使用P28D之外,您还可以使用P4W,即4周。


虽然有些答案可能建议使用strtotime(),但我发现面向对象的方法更有条理。但是,DateInterval仅在PHP> = 5.3.0之后可用(而DateTime在PHP> = 5.2.0之后可用)

答案 2 :(得分:0)

你可以使用strtotime()

echo date('Y-m-d', strtotime('now +4 weeks'));

更新:

$start = date('Y-m-d', strtotime('2014-01-03 +4 weeks'));
echo $start;

你也可以在for循环中运行它以获得接下来的6个或更多日期。例如:

$Date = "2014-01-03";
$Int = 6;
for($i=0; $i<$Int; $i++){
    $Date = date('Y-m-d', strtotime('{$Date} +4 weeks'));
    echo $Date;
}