有没有办法在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');
但我不知道如何计算间隔以及如何找出下一个匹配的日期。
答案 0 :(得分:1)
您应该阅读DateTime课程,特别是DatePeriod和DateInterval:
$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;
}