网站上列出的下一个交货日期

时间:2016-11-11 18:13:13

标签: php

我正在建立一个网站,以便每隔一个星期四进行一次交付。我需要在下一次交货时显示,并且在达到上一个交货日期时将该日期更改为两周。

根据我迄今为止所研究的内容,我将这些代码拼凑在一起:

$start_date = '2016-10-27'; // next delivery date to start counting from

// 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('P2W'); // for delivery every 2 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('tomorrow');
$end_datetime->add($date_interval);

$date_period = new DatePeriod($start_datetime, $date_interval, $end_datetime);

// iterate until the last date in the set
foreach($date_period as $dp) {
    $next_delivery = $dp;
}
?>
<div class="header-next-delivery">
  Next delivery: <?php echo $next_delivery->format('l, M j, Y'); ?>
</div>

这似乎有效,但我不能认为必须有一种更优雅的方法来执行此操作,而不必迭代从集合中的开始日期到最后日期的一组日期。随着时间的推移,这套装置会变得越来越大。

另外,我在查明这些功能的内部工作方面遇到了麻烦 - 我如何设置显示的交付日期提前两周的确切时间?

感谢您的任何见解!

1 个答案:

答案 0 :(得分:0)

您可以获取从$ start_date到当前日期的日期间隔。将它除以14(两周),得到余数并从14减去它。然后你可以将天数值添加到当前日期。

$start_date = date_create('2016-10-27');
$current_date = date_create();
$interval = date_diff($start_date, $current_date);
$days_diff = (int)$interval->format('%a');

$current_date->add(14 - ($days_diff % 14).' days');