Добавление DateInterval, полученного из DateTime-> diff (), не добавляется к исходной дате - PullRequest
0 голосов
/ 30 сентября 2019

Если я снова добавлю объект DateInterval-Object, полученный с помощью DateTime-> diff (), я не окажусь в ожидаемой дате.

Похоже, это связано с часовыми поясами / смещениями времени, когда, какНасколько я понимаю, эти механизмы здесь не должны оказывать никакого влияния.

Я пытаюсь исправить проблему в приложении клиента, которое я отследил до этого. Если это имеет значение: PHP-версия - это PHP 7.3.9 (cli).

Я надеюсь, что это дает хороший пример:

<?php
// expected behaviour
$first = new \DateTime('2020-12-01T00:00:00+00:00');
$second = new \DateTime('2019-01-01T00:00:00+00:00');
$dt = $first->diff($second);
echo $first->add($dt)->format('d.m.Y').PHP_EOL;
echo "Interval:".PHP_EOL;
echo print_r($dt,true).PHP_EOL;


// unexpected behaviour, notice the time-offset
$first = new \DateTime('2020-12-01T00:00:00+01:00');
$second = new \DateTime('2019-01-01T00:00:00+01:00');
$dt = $first->diff($second);
echo $first->add($dt)->format('d.m.Y').PHP_EOL;
echo "Interval:".PHP_EOL;
echo print_r($dt,true).PHP_EOL;

?>

Вывод:

01.01.2019
Interval:
DateInterval Object
(
    [y] => 1
    [m] => 11
    [d] => 0
    [h] => 0
    [i] => 0
    [s] => 0
    [f] => 0
    [weekday] => 0
    [weekday_behavior] => 0
    [first_last_day_of] => 0
    [invert] => 1
    [days] => 700
    [special_type] => 0
    [special_amount] => 0
    [have_weekday_relative] => 0
    [have_special_relative] => 0
)

02.01.2019
Interval:
DateInterval Object
(
    [y] => 1
    [m] => 10
    [d] => 30
    [h] => 0
    [i] => 0
    [s] => 0
    [f] => 0
    [weekday] => 0
    [weekday_behavior] => 0
    [first_last_day_of] => 0
    [invert] => 1
    [days] => 700
    [special_type] => 0
    [special_amount] => 0
    [have_weekday_relative] => 0
    [have_special_relative] => 0
)

Я ожидаю, что эти объекты DateInterval-Object совпадают, так как смещение являетсято же самое на обоих объектах DateTime в обоих случаях. Насколько я понимаю, не только результирующий DateTime-объект должен быть таким же (после добавления), за исключением смещения, но и эти DateInterval-Objects должны совпадать.

Чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...