我正在建立一个网站,以便每隔一个星期四进行一次交付。我需要在下一次交货时显示,并且在达到上一个交货日期时将该日期更改为两周。
根据我迄今为止所研究的内容,我将这些代码拼凑在一起:
$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>
这似乎有效,但我不能认为必须有一种更优雅的方法来执行此操作,而不必迭代从集合中的开始日期到最后日期的一组日期。随着时间的推移,这套装置会变得越来越大。
另外,我在查明这些功能的内部工作方面遇到了麻烦 - 我如何设置显示的交付日期提前两周的确切时间?
感谢您的任何见解!
答案 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');