getNullData
@getNullData

Вычитание периодов, как реализовать?

Доброго дня!

Есть вопрос, не знаю как решить.
Допустим у нас имеются три периода.

  1. с 2017-11-06 по 2017-11-20
  2. с 2017-11-10 по 2017-11-19 (status: false)
  3. с 2017-11-14 по 2017-11-25


Как вычесть период за номером 2, что бы на выходе получить

  1. с 2017-11-06 по 2017-11-10
  2. с 2017-11-20 по 2017-11-25


Использую объект datetime.
# Где 
$period->getDate()->getFirstDate() //2017-11-06T00:00:00
# и соответственно 
$period->getDate()->getLastDate() //2017-11-20T00:00:00
# если статус false, то его надо вычитать.
$period->getDate()->getStatus() //2017-11-20T00:00:00


Спасибо.
  • Вопрос задан
  • 249 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вычитание (A - B) сводится к четырём вариантам:
1. A->firstDate >= B->firstDate && A->lastDate <= B->lastDate
Полностью удаляется период A.

2. A->firstDate > B->firstDate && A->lastDate > B->lastDate
A->firstDate := B->lastDate

3. A->firstDate < B->firstDate && A->lastDate < B->lastDate
A->lastDate := B->firstBade

4. A->firstDate < B->firstDate && A->lastDate > B->lastDate
Период A заменяется на два новых:
A1->firstDate := A->firstDate, A1->lastDate := B->firstDate
A2->firstDate := B->lastDate, A2->lastDate := A->lastDate
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы