PHP:下次交货日期

时间:2015-07-21 20:36:01

标签: php date datetime intervals

PHP Newb,请原谅问题的简单性。

我正在尝试根据两个参数创建一个显示“下一个交付日期”的回显:开始日期和间隔(以天或周为单位)。

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

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

2 个答案:

答案 0 :(得分:0)

您可以使用DatePeriodDatePeriodDateTime个对象作为开始日期,第一个参数,DateInterval对象作为重复的间隔,第二个参数和{{1}表示句点的结束日期或重复次数的对象或整数。

例如,如果你有一个今天的开始日期和一个3周的间隔,你可以得到这样的交付日期......

DateTime

这应该会给你一些......

$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');
}

答案 1 :(得分:0)

强烈建议您使用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');