php - PHP 显示每周两次交货的下一个交货日期
问题描述
我有一个网站,我们会在其中显示下一个交货日期,例如每周二每周交货 - 尽管有时需要手动更改交货的实际日期。我需要将其更新为(例如)周二和周五交货,我正在努力寻找一个好的方法。
这是我目前的设置方式:
<?php
$start_date = '2020-05-05'; // Date in the past to start counting from: YYYY-MM-DD
$date_interval = new DateInterval('P7D'); // DELIVERY EVERY x DAYS: PxD (usually P7D)
// 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');
// 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;
}
echo $next_delivery->format('l, M j, Y');
?>
dateperiod类表示它接受ISO 8601 时间段,但据我所知,无法将其设置为“下周二或周五,以更近者为准”。
我想到的一种可行的方法是运行此函数两次,一次在星期二,一次在星期五,与今天的日期进行比较,并显示未来较早的日期。但肯定有更优雅的方式吗?
解决方案
要找到下一个可用的周二或周五,这是一个非常冗长的方法。一种方法是检查它是星期几,并根据它动态设置日期:
$day = (in_array((int) date('w'), [0,1,5,6], true)) ? 'Tuesday' : 'Friday';
echo (new DateTime("next {$day}"))->format('l, M j, Y');
输出:
Tuesday, May 12, 2020
上面的代码检查日期是星期日、星期一、星期五还是星期六。如果是这样,请将第二天设置为“星期二”。否则,将其设置为“星期五”。然后您可以使用相对日期时间值来设置您的日期。
如果您想要一个更易于阅读的版本,您可以拼出日期:
$day = (in_array(date('l'), ['Sunday', 'Monday', 'Friday', 'Saturday'], true)) ? 'Tuesday' : 'Friday';
推荐阅读
- firebase - Firebase rules.MapDiff 是否知道嵌套字段的更改?
- c# - 在 C# 中使用带有 SSH.NET 的字符串中的“OPENSSH”私钥文件失败,并出现“无效的私钥文件”
- xml - Wonderware Archestra IDE 中的 XML 到 TreeView
- python - 如何在 Python 2.x 中创建定义长度的零字符串
- sql - 在postgres中选择日期列等于今天日期的所有行到分钟
- mysql - 无法使用 JPA 查询检索结果
- mysql -
具有多对多关系 - javascript - if 语句中的 Javascript addEventListener(检查状态)
- python - 在 WebDriverWait 中使用自己的变量。硒。Python
- android - 如何在 Android 数量字符串(复数)中使用零数量大小写?