Как сохранить дату и день в отдельный массив без воскресений?

Я пытаюсь сохранить серию из пяти дат в массиве для вызова. Дата не имеет диапазона, так как для начала используется текущая дата.

Я бы хотел сэкономить без воскресенья, так как в моем случае доставка не возможна в воскресенье. Я сохраняю даты и день в отдельных массивах.

$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)

Есть ли способ, которым я могу получить следующее —

Понедельник, вторник, среда, четверг, пятница (включая даты каждого дня в формате d 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

Решение

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

Другие решения

Предполагая, что вы можете использовать углерод, Одним из способов реализации является создание диапазона с помощью цикла 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');
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector