如何将日期和日期保存到不包含星期日的单独数组中?

时间:2018-11-09 13:27:50

标签: php

我正在尝试将一系列五个日期保存到要调用的数组中。该日期没有范围,因为它是从当前日期开始。

我想在没有任何星期日的情况下进行保存,因为在我的情况下,周日无法送货。我将日期和日期都保存在单独的数组中。

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

上面的代码仍然显示星期日。

2 个答案:

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