Странное поведение с объектами php datetime - вычитание из даты во второй раз при вызове diff () - PullRequest
1 голос
/ 11 ноября 2010

Когда я вычитаю 1 день из объекта datetime, он делает то, что должен, он вычитает один день. но если я использую diff () для сравнения двух объектов datetime, то он снова вычитает день. Вы можете увидеть в следующем примере кода:

$currTime = new DateTime();
$lastPurge = new DateTime("14:33");
$lastPurge->sub(new DateInterval("P1D"));

echo $lastPurge->format("d/m/Y H:i:s\n\n");

$diff = $currTime->diff($lastPurge);

echo $lastPurge->format("d/m/Y H:i:s\n\n");

Вывод этого кода:

10/11 / 2010 14: 33: 00

09/11/2010 14: 33: 00

Как видите, после вызова sub () он вычитал 1 день, как и ожидалось. Но затем после использования diff () он вычитает другой день. Почему еще один день вычитается после использования diff () для вычисления разницы? Это должно сделать это?

1 Ответ

1 голос
/ 11 ноября 2010

Невозможно воспроизвести на PHP 5.3.3 с часовым поясом Америка / Нью-Йорк:

php > $currTime = new DateTime();
php > $lastPurge = new DateTime("14:33");
php > $lastPurge->sub(new DateInterval("P1D"));
php >
php > echo $lastPurge->format("d/m/Y H:i:s\n\n");
09/11/2010 14:33:00

php >
php > $diff = $currTime->diff($lastPurge);
php >
php > echo $lastPurge->format("d/m/Y H:i:s\n\n");
09/11/2010 14:33:00

Вы правы, что diff ничего не говорит об изменении любого входного параметра.

РЕДАКТИРОВАТЬ: Это ошибка 49059 . changelog говорит, что первый выпуск с исправлением 5.3.3.

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