Wpis z mikrobloga

@AVAW:

Niestety nie działa

jaca@fafik:~$ php5 -r "echo (new DateTime(\"2016-01-01\"))->diff(new DateTime(\"2016-12-01 01:00:00\"))->format(\"%m\").PHPEOL;";
10
jaca@fafik:~$ php5 -r "echo (new DateTime(\"2016-01-01\"))->diff(new DateTime(\"2016-12-01 02:00:00\"))->format(\"%m\").PHP
EOL;";
10
jaca@fafik:~$ php5 -r "echo (new DateTime(\"2016-01-01\"))->diff(new DateTime(\"2016-12-01 12:00:00\"))->format(\"%m\").PHPEOL;";
10
jaca@fafik:~$ php5 -r "echo (new DateTime(\"2016-01-01\"))->diff(new DateTime(\"2016-12-02 12:00:00\"))->format(\"%m\").PHP
EOL;";
11

Wydaje mi sie, że takich błedów może być więcej

https://bugs.php.net/search.php?search_for=DateTime+diff&boolean=0&limit=30by=&direction=DESC&cmd=display&status=Open&bugtype=All&project=All&phpos=&phpver=&cveid=&assign=&authoremail=&bugage=0&bug_updated=0

najnowszy php 7.1 + opcache juz sie kompiluje na docelowej
@AVAW: kurde masz racje, po dodaniu godziny do startowej daty jest ok

jaca@fafik:~$ php5 -r "echo (new DateTime(\"2016-01-01 01:00\"))->diff(new DateTime(\"2016-12-01 01:00\"))->format(\"%m\").PHP_EOL;";
11

W sumie to może być jakiś workaround ...
@grabsoon: @AWAW:
To nie jest błąd pomiędzy wersjami tylko kwestia ustawionej strefy czasowej.

W jednym przypadku wynikowy DateInterval ma 11 miesięcy, w drugim 10 miesięcy i 30 dni.

Z czego wiem, powód jest związany z tym, że przy obliczaniu diffa, DateTime'y są najpierw przeliczane do czasu UTC, ale szczegółów nie znam. Niewątpliwie nie można zbytnio ufać %m i %d w DateInterval, ponieważ wynik zmienia się w zależności od konfiguracji PHP.