Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Выкинуть часы/дни из даты
Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010
Помог: 3 раз(а)
Пишу нечто вроде call-центра. Так вот, служба оформляет заявки в любое время.
Монтеры выполняют заявки по рабочим дням ПН-ПТ и с 9.00 до 19.00.
Срок выполнения заявки 3 рабочих дня.
Время в базе хранится в unixtime.
В чем суть проблемы. Когда оформляется заявка, время составления указывается текущее (независимо от времени и дня недели), а вот срок выполнения должен быть:
1. Если это суббота или воскресенье, то 19.00 среды.
2. Если будний день, и время рабочее, то ровно 3-е суток.
3. Если будний день и время до 9.00 или после 19.00, то срок 19.00 на третьи сутки.
По идее надо еще кучу elseif дописать. Но дальше для меня пошла головоломка. Может кто сможет подсказать более вразумительное решение данной задачи.
Вывожу время пока в "удобном" формате, чтоб можно было наглядно смотреть правильно ли работает функция. (Добавление)
О, вот что придумал.
Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010
Помог: 3 раз(а)
Сам нашел косяк. Если заявка принимается после 19-00 в пятницу, то сроком будет понедельник 19.00. То же, если принята в четверг или в среду после 19.00.
В общем кошмар, завис я на этом!
demot
Отправлено: 16 Мая, 2011 - 14:04:43
Частый гость
Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010
Помог: 3 раз(а)
Может кто все-таки поможет составить функцию. Я даже все красиво нарисовал, чтоб понятней было что требуется Прикреплено изображение (Нажмите для увеличения)
zypikov
Отправлено: 16 Мая, 2011 - 14:51:16
Частый гость
Покинул форум
Сообщений всего: 219
Дата рег-ции: Нояб. 2010
Помог: 3 раз(а)
demot, так что функция неправильно работает??
Админы, исправьте маленький косяк, вводящий неопытный народ в заблуждение в описании на сайте функции date(). В первом примере будет не Wednesday, a Monday)
----- У всего есть обратная сторона.
demot
Отправлено: 16 Мая, 2011 - 15:40:22
Частый гость
Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010
Помог: 3 раз(а)
не, неправильно, слишком много нюансов.
Саныч
Отправлено: 16 Мая, 2011 - 16:51:28
Участник
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
чего-то меня заинтересовала ваша задача, написал функцию
параметр - unix-время оформления заказа, возвращается unix-время истечения заказа...
если заказ оформлен только-что то вызываем просто request_time() без параметра
Проверяйте...
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
demot
Отправлено: 16 Мая, 2011 - 17:06:48
Частый гость
Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010
Помог: 3 раз(а)
Саныч пишет:
Проверяйте...
Египетская сила!
Спасибо большое, буду проверять!
вызываю echo date("d.m.Y H:i",request_time());
Warning: date() expects parameter 2 to be long, string given in Z:\home\localhost\www\test.php on line 4
Warning: date() expects parameter 2 to be long, string given in Z:\home\localhost\www\test.php on line 4
Warning: date() expects parameter 2 to be long, string given in Z:\home\localhost\www\test.php on line 5
Warning: date() expects parameter 2 to be long, string given in Z:\home\localhost\www\test.php on line 5
Warning: date() expects parameter 2 to be long, string given in Z:\home\localhost\www\test.php on line 5
Warning: date() expects parameter 2 to be long, string given in Z:\home\localhost\www\test.php on line 5
я думал можно присваивать и значение функции, оказалось нет(
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
demot
Отправлено: 17 Мая, 2011 - 09:30:38
Частый гость
Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010
Помог: 3 раз(а)
Спасибо еще раз, все работает чудненько, правда пришлось немножко подкорректировать
return mktime(date('G',$t),date('i',$t),date('s',$t),date('n',$t),date('j',$t) + (date('w',$t) == 3 ? 5 : (date('w',$t) == 4 ? 4 : (date('w',$t) == 5 ? 3 : 2))),date('Y',$t));
заменить на
return mktime(date('G',$t),date('i',$t),date('s',$t),date('n',$t),date('j',$t) + (date('w',$t) == 3 ? 5 : (date('w',$t) == 4 ? 4 : 3)),date('Y',$t));
Т.к. если понедельник или вторник, то добавляло только 2 дня, вместо 3-х.
Саныч
Отправлено: 17 Мая, 2011 - 12:53:14
Участник
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
demot, вы как раз таки и сделали 3 дня, вместо двух, которые были прописаны...
вы удалили часть, которая отвечала за пятницу и теперь, если кто-то оформит заказ, к примеру, в пятницу в 14.00, то его окончание будет в понедельник в 14.00, а не в среду как вы хотели...
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
demot
Отправлено: 17 Мая, 2011 - 13:37:49
Частый гость
Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010
Помог: 3 раз(а)
Саныч пишет:
demot, вы как раз таки и сделали 3 дня, вместо двух, которые были прописаны...
вы удалили часть, которая отвечала за пятницу и теперь, если кто-то оформит заказ, к примеру, в пятницу в 14.00, то его окончание будет в понедельник в 14.00, а не в среду как вы хотели...
Да, вы правы. Вернул назад, но ситуация не изменилась, т.е. заявки оформленные в пятницу истекают в понедельник вместо среды.
И тогда все же получается что заявки понедельника и вторника имеют срок в двое суток, а не трое.
Странно конечно, уже столько рабочего функционала готово, а запнулся на, казалось бы, такой ерунде.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.