PHP:下一次交付日期


PHP: Next delivery date

PHP Newb,所以请原谅这个问题的简单性。

我正在尝试创建一个小的回声,显示"下一个交付日期"基于两个参数:一个开始日期和一个间隔(天或周)。

我特别想要的是能够输入,例如,今天作为"开始日期"和间隔(例如,"3周"),并让脚本返回"您的下一次交付是在XXX",其中XXX是未来即将到来的下一个3周间隔,包括两天前,当它切换到"明天"时。在实际日期,它移动到下一个时期(交货日期不能订购)到无限或未来的某个现实日期(未来5年?)

这可能吗?我看过之前的问题,添加一个锁定日期(日期+未来的一段时间)似乎相当微不足道,但我没有遇到任何查看当前日期并考虑下一次复发的东西……

您可以使用DatePeriod。DatePeriod将以DateTime对象作为开始日期,作为第一个参数,以DateInterval对象作为重复的间隔,作为第二个参数,以DateTime对象或整数表示结束日期或周期的重复次数。

例如,如果您有今天的起始日期和3周的间隔,那么您可以这样得到交付日期…

$start    = new DateTime('today');
$interval = new DateInterval('P3W');
$period   = new DatePeriod($start, $interval, 1, DatePeriod::EXCLUDE_START_DATE);
foreach($period as $deliveryDate) {
    echo "Next delivery date: " . $deliveryDate->format('Y-m-d');
}

这应该会给你类似于…

Next delivery date: 2015-08-11

您强烈建议使用DateTime, DateInterval, DatePeriod类。它可能看起来像这样:

$start_date = '2015-07-21'; // or whatever date you get from some location
// create a DateTime object that represents start of sequence
$start_datetime = DateTime::createFromFormat('Y-m-d', $start_date);
// create a DateTime object representing the current date/
$current_datetime = new DateTime('today');    
$date_interval = new DateInterval('P3W'); // for 3 weeks
// determine end date for DatePeriod object that will later be used
// this is no further out than current date plus the interval
$end_datetime = new DateTime('today');
$end_datetime->add($date_interval);
$date_period = new DatePeriod($start_datetime, $interval, $end_datetime, DatePeriod::EXCLUDE_START_DATE);
// at this point, you simply need to grab last item from $date_period to get next delivery
// unfortunately there is no array access on this object, so you just need to iterate until the end
foreach($date_period as $dp) {
    $next_delivery = $dp;
}
// echo date from next delivery
echo $next_delivery->format('Y-m-d');