Intereting Posts
Syntastic for Vim: Каковы требуемые строки в ~ / .vimrc? (Проверка ошибок PHP) Есть ли способ сказать завиток, чтобы не использовать кеш Как использовать RDBMS по-исполнительски поверх Zend_Db_Table? (если вообще…) PHP: безопасна ли функция implode () для многобайтовых строк? Отдельные слова, разделенные пробелами в строке Как установить плагин PHP IDE для Eclipse непосредственно из среды Eclipse? Настройка тестового приложения PHP SwiftMailer Как сделать MD5 более безопасным? Или это действительно необходимо? Не удалось записать файл базы данных chmod 777 на SQlite3 через php 5.3.0 Углеродная ошибка POST: ответ на предполетный период имеет недопустимый код состояния HTTP 404 php: // input <> $ _POST? Datetime в PHP Script Что использовать, если я хочу повторить набор параметров в сеансе php libcurl Как переопределить не подключаемую функцию родительской темы из файла non function.php? Как очистить предыдущую переменную в кеше во время вызова Ajax при отправке переменной в PHP

Рассчитать количество часов в заданный период времени между двумя датами

У меня есть система бронирования, в которой пользователи могут забронировать номер в любое время и на любое количество непрерывных дней. Бронирование производится в зависимости от количества минут, в течение которого комната используется.

В системе бронирования время начала и окончания представлено двумя временными метками. например

start_time = 1397124000 end_time = 1397129400 

Из этого я могу рассчитать количество забронированных секунд и, следовательно, рассчитать заряд.

Проблема в том, что я хотел бы рассчитать 50-процентную скидку на любые заказы, сделанные из пиковых времен – до 8 утра и после 6 вечера. Заказы могут быть сделаны в течение этих времен (т.е. 7 утра-9 утра), и поэтому соответствующая доля должна быть снижена (50% скидка на 7-8-часовую часть бронирования 7-9 утра).

Мой код для вычисления этого становится чрезвычайно запутанным и сложным, так как существует несколько сценариев:

  1. Бронирование начинается и заканчивается в течение периода скидок (например, 3 утра до 7 утра – 4 часа со скидкой)
  2. Бронирование начинается со скидкой, но заканчивается позже (например, с 7:00 до 9:00 – 1 час скидка)
  3. Бронирование начинается и заканчивается в период без скидки (с 10 до 17 вечера – без скидки)
  4. Бронирование начинается в период без скидки, но заканчивается позже (с 17:00 до 20:00 – 1 час скидка)
  5. Бронирование охватывает весь период до и после скидок (с 2 до 10 вечера – 10 часов со скидкой) или даже более сложный (2 часа ночи с 1 по 10 вечера на 5-й день – скидка 50 часов).

На данный момент, пытаясь выяснить, какая часть бронирования находится в течение этих до 8 часов, период скидок после 6 вечера, когда только с отметкой времени начала и конца очень сложно.

Мой код – очень большая серия тестов if и else с началом и временем окончания, но он не устойчив к бронированию, который охватывает более одного дня и в противном случае очень грязный.

Я ищу метод, который может легко подсчитать, какая доля заказа находится в пределах дисконтированного времени, что объясняет все возможные сценарии. Трудная проблема!

Solutions Collecting From Web of "Рассчитать количество часов в заданный период времени между двумя датами"