Счётчик с пропуском дней!

dang3r

Новичок
Счётчик с пропуском дней!

У меня такая задача. Мне нужно вводить дату когда работник уходит в отпуск и кол-во дней! И оно должно выводить когда он вернётся с отпуска! Это у меян не составило трудности но возникла проблема, так как в дни отпуска не входят праздники!

Вот мой код!

Посылаю кол-во дней и дату выхода с другой страницы методом POST
$days=кол-во дней
$date=дата выхода в отпуск
$newtime=дата возвращения
$vih=масив праздников (01-01)=(месяц-день)

$days=$_POST['days'];
$date=$_POST['date'];
$newtime=date("Y-m-d", strtotime("+$days days", strtotime($date)));

$vih = array('01-01','01-07','03-08','04-04','05-01','05-02','05-09','05-23','06-28','08-24');

Помогите организовать пропуск дней - праздников!
 

Fortop

Новичок
Просто посчитай сколько праздников будет между уходом и выходом и добавь это к отпуску.
Затем считаешь сколько праздников между прошлой датой выхода и новой и добавляешь их к отпуску.
И так до тех пор пока число праздников между датами не будет равно 0.
 

zerkms

TDD infected
Команда форума
dang3r
тебе написали алгоритм. сядь и реализуй его в коде.
 

AmdY

Пью пиво
Команда форума
dang3r
конечно, всего-то взамен твоих отпускных, всё равно тебе вредно отдыхать.

здесь не подают, начни решать, тогда помогут чего, а не "ПОМОГИТЕ"
 

Wicked

Новичок
Просто посчитай сколько праздников будет между уходом и выходом и добавь это к отпуску.
Затем считаешь сколько праздников между прошлой датой выхода и новой и добавляешь их к отпуску.
И так до тех пор пока число праздников между датами не будет равно 0.
какой ужас :)

нужно добавлять дни с момента ухода по одному, и в случае, если это не праздник, увеличивать счётчик дней... и так до тех пор, пока счётчик не станет равен заданному кол-ву дней. в.с.ё.
 

Fortop

Новичок
Эм, а где ужас то?

нужно добавлять дни с момента ухода по одному, и в случае, если это не праздник, увеличивать счётчик дней... и так до тех пор, пока счётчик не станет равен заданному кол-ву дней. в.с.ё.
Ага, вот она разница между динозаврами, которые пользуются доисторическими языками 3 поколения :D

И более продвинутыми перцами, пользующимися языками 4го поколения :D

[sql]SELECT COUNT(hdate) FROM holiday WHERE hdate BETWEEN startdate AND enddate[/sql]
 

Wicked

Новичок
ужас - потому что подход напоминает
PHP:
do {str_replace('  ', ' ')} while ()
к тому же:
1) про бд речи не шло
2) итеративные запросы к бд - обычно зло
3) between '12-31' and '01-15', гыгы
4) Simple is better than complex.
 

Fortop

Новичок
Автор оригинала: Wicked
ужас - потому что подход напоминает
PHP:
do {str_replace('  ', ' ')} while ()
Понятно. Это личный опыт? :D
Или итеративные решения в принципе не имеют права на существование? :)


Автор оригинала: Wicked
1) про бд речи не шло
2) итеративные запросы к бд - обычно зло
3) between '12-31' and '01-15', гыгы
4) Simple is better than complex.
А это уже вопросы конкретной реализации и оптимизации.
Какой смысл преждевременно оптимизировать неизвестно что? :D

Чисто алгоритмически мне больше нравятся 1-2 итерации, чем бег по всем датам промежутка и затем поиск их в списке :D
Хотя я и не претендую на абсолютно правильное решение.
 

Wicked

Новичок
Понятно. Это личный опыт?
личный - сам мог подобное написать лет 8 назад.
Или итеративные решения в принципе не имеют права на существование?
касательно запросов к бд - имеют, но редко
Чисто алгоритмически мне больше нравятся 1-2 итерации, чем бег по всем датам промежутка и затем поиск их в списке
вот это и есть преждевременная оптимизация в данном случае, которая уже привела к сложным ошибкам - если честно, я вообще едва ли захотел бы придумывать запрос, который обеспечил бы работу на стыке годов.

кроме того, она бессмыслена и с точки зрения вычислительной сложности (мнимые 1-2 итерации с огромным C), и с точки зрения кол-ва кода (у меня весь алгоритм строки на 4 потянет).

Хотя я и не претендую на абсолютно правильное решение.
резюмируя... оно не то что бы не абсолютно правильное... оно банальное неправильное
 

Fortop

Новичок
Wicked
Fortop
Чисто алгоритмически мне больше нравятся 1-2 итерации, чем бег по всем датам промежутка и затем поиск их в списке
вот это и есть преждевременная оптимизация в данном случае
Эм? Оптимизация чего? Можно узнать?

Wicked
которая уже привела к сложным ошибкам - если честно, я вообще едва ли захотел бы придумывать запрос, который обеспечил бы работу на стыке годов.
Ух ты, я настолько лузер? :)
В 2х виденных мною ОДБ и одной системе документооборота фигурировал именно такой запрос как я привел.
А там где использовался предложенный Вами алгоритм, там было -надцать запросов к БД в цикле :D

Потому что список праздничных и выходных дней не то чтобы каждый год разный, а еще и имеет тенденцию непредсказуемо меняться постановлениями правительства :D
И поэтому он банально хранился в таблице для каждого года.

Чего там было про простоту решения, преждевременную оптимизацию, сложные ошибки и альтернативные 4 строки кода? :D

Я же говорю - я не претендую на истину в последней инстанции, но пока Вы меня не убедили. Буду рад, если сможете.
 

Wicked

Новичок
Потому что список праздничных и выходных дней не то чтобы каждый год разный, а еще и имеет тенденцию непредсказуемо меняться постановлениями правительства
И поэтому он банально хранился в таблице для каждого года.
ну в такой постановке вопроса сложно не согласиться, когда априори база используется :)

мое решение остается вполне разумным в случае как у ТС, когда все праздники уже есть на стороне пхп
 
Сверху