PHP: 下一个交货日期

PHP: Next delivery date

PHP新手,请原谅问题太简单了。

我正在尝试根据两个参数创建一个显示 'next delivery date' 的小回显:开始日期和间隔(以天或周为单位)。

我特别想要的是能够输入,例如,今天作为 'start date' 和间隔(例如,“3 周”),并让脚本 return "your next delivery is on XXX",其中 XXX 是未来的下一个即将到来的 3 周间隔,直到并包括两天前,当它切换到 "tomorrow" 时。在实际日期,它移动到下一个周期(交货不能在交货日期订购)进入无穷大或未来某个现实日期(未来 5 年?)

这可能吗?我查看了以前的问题,添加一个锁定日期(一个日期 + 未来的一个固定时间段)似乎相当微不足道,但我没有遇到任何查看当前日期并考虑下一个日期的内容复发将是......因此我在这里问。

您可以为此使用 DatePeriodDatePeriod 将采用 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');