Задать вопрос
@madc0de

Как учитывать праздники при добавлении дней к дате в php?

Добрый день!
Написал скрипт расчета доставки
function delivery( $day1, $day2 ) {
  $months = array( 1 => 'января' , 2 => 'февраля' , 3 => 'марта' , 4 => 'апреля' , 5 => 'мая' , 6 => 'июня' , 7 => 'июля' , 8 => 'августа' , 9 => 'сентября' , 10 => 'октября' , 11 => 'ноября' , 12 => 'декабря' );

  $date1 = strtotime('+' . $day1 . ' days');
  $date2 = strtotime('+' . $day2 . ' days');

  if( date('n', $date1) > date('n', $date2) ) {
    return date("j " . $months[date('n', $date1)], $date1) . ' - ' . date("j " . $months[date('n', $date2)], $date2);
  }else{
    return date("j", $date1) . ' - ' . date("j " . $months[date('n', $date2)], $date2);
  }
}
echo delivery( 1, 3 );


Как учитывать праздники если дата выпадает или находится в диапазоне?
$d = (12,14,18)
Например дата доставки написана: 12 - 14 января
А праздник 12 числа, тогда должно показывать 13 - 15 января
Если праздник 13 числа, то 12-15 января
Если праздник 12 и 14, то 13 - 16 января

Сначала написал сумирование к первой дате, потом расчет диапозона и через цикл прибавление ко второй но как то итоге не получается и все слишком сложно и примитивно. Куча кода для 1 месяца, а если их много и допустим массив выглядит:
$d = array( array( 0 => 1, 1 => array( 12, 14, 18) ) );

0 - номер месяца, 1 - массив с датами праздников и выходных
  • Вопрос задан
  • 260 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
1. составить массив праздников (вернее, дат, когда ваша доставка не работает)
2. foreach праздников. Если праздник >= date1 && <= date2, то date2 '+1 day'

Ну и вместо говнокода используйте php.net/manual/en/book.datetime.php для дат и www.php.net/manual/en/intro.intl.php для названий месяцев и их склонений.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
18 дек. 2024, в 16:33
2000 руб./в час
18 дек. 2024, в 16:06
5000 руб./за проект
18 дек. 2024, в 16:03
45000 руб./за проект