我正在尝试将一系列五个日期保存到要调用的数组中。该日期没有范围,因为它是从当前日期开始。
我想在没有任何星期日的情况下进行保存,因为在我的情况下,周日无法送货。我将日期和日期都保存在单独的数组中。
$date = new DateTime("+ 1 day", new DateTimeZone('Asia/Thailand') );
for ($i=1; $i<=5; $i++) {
$date->modify("+1 weekday");
$delivery_dates[] = $date->format("m/d/Y");
$delivery_days[] = $date->format("l, d F Y");
}
此刻,我得到以下内容-
星期日,星期一,星期二,星期三和星期四(包括以d F Y格式表示的每一天的日期)
有没有办法我可以得到以下内容-
星期一,星期二,星期三,星期四,星期五(包括每天以F Y格式显示的日期)?
我想为每个星期日+1天,以便在星期一有空交付。
我使用了以下内容-
for ($i=1; $i<=5; $i++) {
$date->modify("+1 weekday");
if ($date->format("N") !== 7 {
$delivery_dates[] = $date->format("m/d/Y");
$delivery_days[] = $date->format("l, d F Y");
}
}
上面的代码仍然显示星期日。
答案 0 :(得分:0)
$from = '2018-10-10';
$to = '2018-12-10';
$start = new \DateTime($from);
$end = new \DateTime($to);
$interval = \DateInterval::createFromDateString('1 day'); // 1 day === P1D, 5 month and 5 years === P5M5Y
$period = new \DatePeriod($start, $interval, $end); // A date period allows iteration over a set of dates and times, recurring at regular intervals, over a given period.
// new \DatePeriod(10-10-2010, 5, 30-10-2010) ===> [10-10-2010, 15-10-2010, 20-10-2010, 25-10-2010, 30-10-2010]
$result = [];
foreach ($period as $day) {
if (! in_array($day->format('w'), [0, 6])) { // check every date in period, ->format('w'): w - number of day; Monday = 1 or 7 (depends on wat day declared first)
$result['date'][] = $day->format("m/d/Y");
$result['day'][] = $day->format("l, d F Y");
}
}
答案 1 :(得分:0)
假设您可以使用Carbon,一种实现方式是在while循环的帮助下生成范围,并且仅在非星期日的情况下才添加日期,同时确保您可以您需要的天数为5。
/**
* @param int $amount
* @return Carbon[]
*/
public function getDeliveryDates($amount = 5): array
{
$days = [];
$current = Carbon::today();
while (\count($days) < $amount) {
$day = clone $current; // addDay works on instance, cloning it
$day->addDay();
$current = $day; // setting current to current day, so that it will iterate
if ($current->isSunday()) {
continue;
}
$days[] = $current;
}
return $days;
}
然后,您只需格式化日期即可。如果仍然需要两个数组的信息,则只需要迭代生成的数组即可:
$formattedDates = [];
$formattedDays = [];
foreach (getDeliveryDates() as $date) {
$formattedDates[] = $date->format('m/d/Y');
$formattedDays[] = $date->format('l, d F Y');
}