|
|
|
|
|
для: Trianon
(11.02.2014 в 12:26)
| | confirm,
Trianon, >> Рабочие дни определяются производственным календарем.
Скрипт будет использоваться в личных целях, когда рабочие дни именно с пн-пт )
Спасибо.
<?php
function working_days($count) {
$date = date( 'd-m-Y' );
$day_week = date( 'N', strtotime( $date ) );
$day_count = $count + $day_week;
$week_count = floor($day_count/5);
$holiday_count = ( $day_count % 5 > 0 ) ? 0 : 2;
$week_day = $week_count * 7 - $day_week + ( $day_count % 5 ) - $holiday_count;
$date_end = date( "d-m-Y", strtotime( $date . " + $week_day day " ) );
$date_end_count = date( 'N', strtotime( $date_end ) );
$holiday_shift = $date_end_count > 5 ? 7 - $date_end_count + 1 : 0;
return date("d-m-Y", strtotime($date_end . " + $holiday_shift day "));
}
echo working_days(20);
|
| |
|
|
|
|
|
|
|
для: tima2010
(11.02.2014 в 12:03)
| | Скрипт не учитывает текущий день недели.
Простейший опровергающий пример. Допустим, Вам нужно прибавить 1 (один) день.
Перескок через выходные должен происходить лишь в пятницу, но поскольку ceil округляет число вверх, то он будет выполнен в любом случае.
А вообще, считать рабочие дни строго с пн по пт - это несколько в стороне от реалий.
Рабочие дни определяются производственным календарем. | |
|
|
|
|
|
|
|
для: tima2010
(11.02.2014 в 12:03)
| | А с чего вы решили, что если 3 недели, то обязательно и 6 дней выходных? У вас что предполагается, что в любом случае ваши дни берут начало с понедельника?
20 дней / на 7 дней, это никак не 3 недели, округление тут это ошибка, так как это 3, но не полных недели. | |
|
|
|
|
|
|
| Привет,
не могу понять где ошибся.
Пишу код для прибавления к текущей дате N количество рабочих дней. В неделе 5 рабочих дней (пн,вт,ср,чт,пт)
<?php
/* Сколько дней прибавить*/
$days = 20;
/* Сколько недель в рабочих днях */
$week = $days > 5 ? ceil($days / 7) : 0 ;
/* Получаем количество выходных */
$holiday = $week * 2;
/* Суммируем дни */
$all_days = $days + $holiday;
/* Получаем дату */
echo date("d-m-Y", time() + 3600 * 24 * $all_days);
|
Прибавив к 11-02-2014 рабочие дни, скрипт должен отобразить: 11-03-2014
Но получаю: 09-03-2014
В каких днях я ошибся? | |
|
|
|
|