DateInterval составляет 1 месяц и 2 дня с 2018-03-01 по 2018-04-01

У меня есть объект Конвенции с startDate и endDate. Я хочу клонировать этот объект, позволяя выбрать новый startDate. Затем я перенесу все даты дочерних объектов в соответствии с этим смещением даты.

Вот что у меня есть:

$newDate = $_POST('newDate');

$originalConventionBeginDate = clone $convention->getBeginDate();
$newConvention = clone $convention;

$jumpInterval = $originalConventionBeginDate->diff($newDate);
error_log(sprintf("Original: %s", print_r($originalConventionBeginDate, true)));
error_log(sprintf("New date: %s", print_r($newDate, true)));
error_log(print_r($jumpInterval, true));

//more code adding $jumpInterval to child objects' dates
foreach ($newConvention->getHallReservation() as $newHallR)
{
$prevDate = clone $newHallR->getDate();
$prevDate->add($jumpInterval);
$newHallR->setDate($prevDate);
}

В результате, если я клонирую соглашение, начинающееся в 2018-03-01 в 2018-04-01, $jumpInterval является 1 месяц и 3 дня, Итак, в то время как новая Конвенция должна начаться в 2018-04-01 его дочерние объекты установлены в 2018-04-04,

Это моя информация журнала:

Оригинал: объект DateTime ([date] => 2018-03-01 00: 00: 00.000000 [timezone_type] => 3 [timezone] => Европа / Берлин)

Новая дата: объект DateTime ([date] => 2018-04-01 00: 00: 00.000000 [timezone_type] => 3 [timezone] => Европа / Берлин)

DateInterval Object ([y] => 0 [m] => 1 [d] => 3 [h] => 0 [i] => 0 [s] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 [invert] => 0 [days] => 31 [special_type] => 0 [special_amount] => 0 [have_weekday_relative] => 0 [have_special_relative] => 0)

Я вижу, что JumpInterval также имеет [days] => 31 который кажется более точным, чем [m] => 1 [d] => 3Может быть, это что-то сделать, сейчас мы в феврале, и в этом месяце 28 дней ??

Какая правильная операция закончена $originalConventionBeginDate а также $newDate?

Спасибо

РЕДАКТИРОВАТЬ: Добавлено add() немного кодировать

0

Решение

Я думаю, вы сможете исправить это, просто изменив:

$prevDate->add($jumpInterval);

чтобы:

$prevDate->modify("+$jumpInterval->days days");
-1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector