Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Прибавить Рабочие дни к date()

Сообщения:  [1-4] 

 
 автор: tima2010   (11.02.2014 в 13:19)   письмо автору
 
   для: 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 ) ? 2;
    
    
$week_day          $week_count $day_week + ( $day_count ) - $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 $date_end_count 0;
    
    return 
date("d-m-Y"strtotime($date_end " + $holiday_shift day "));
}

echo 
working_days(20);

  Ответить  
 
 автор: Trianon   (11.02.2014 в 12:26)   письмо автору
 
   для: tima2010   (11.02.2014 в 12:03)
 

Скрипт не учитывает текущий день недели.
Простейший опровергающий пример. Допустим, Вам нужно прибавить 1 (один) день.
Перескок через выходные должен происходить лишь в пятницу, но поскольку ceil округляет число вверх, то он будет выполнен в любом случае.

А вообще, считать рабочие дни строго с пн по пт - это несколько в стороне от реалий.
Рабочие дни определяются производственным календарем.

  Ответить  
 
 автор: confirm   (11.02.2014 в 12:20)   письмо автору
 
   для: tima2010   (11.02.2014 в 12:03)
 

А с чего вы решили, что если 3 недели, то обязательно и 6 дней выходных? У вас что предполагается, что в любом случае ваши дни берут начало с понедельника?
20 дней / на 7 дней, это никак не 3 недели, округление тут это ошибка, так как это 3, но не полных недели.

  Ответить  
 
 автор: tima2010   (11.02.2014 в 12:03)   письмо автору
 
 

Привет,

не могу понять где ошибся.

Пишу код для прибавления к текущей дате N количество рабочих дней. В неделе 5 рабочих дней (пн,вт,ср,чт,пт)

<?php
/* Сколько дней прибавить*/
$days          20;

/* Сколько недель в рабочих днях */
$week          $days ceil($days 7) : ;

/* Получаем количество выходных */
$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

В каких днях я ошибся?

  Ответить  

Сообщения:  [1-4] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования