Hi, I wanted to get into PHP code development so I grabbed a random bug from bugs.php.net. Which turned out to be https://bugs.php.net/bug.php?id=69378
The problem the bug report describes is that creating a diff between two dates and then subtracting the diff from the later date does not give you the former date. Or, as the bug report state, this should hold: B - (B - A) == A But it doesn't, because of the way DateInterval and DateTime interact. A DateInterval is broken up into years, months, days, hours, minutes and seconds - which can be added or subtracted from a date. However, months are not fit size, so the order in which things are added or subtracted matters. In the bug report, the problem arises because months are subtracted before days - and there's a huge difference between subtracting 17 days from 2. April and from 2. March. In itself, this isn't a big problem - but apparently this behaviour is how the system is supposed to work. In the tests for the date extension, I found this test for DateTime::add echo "test_years_positive__6_shy_1_day: "; examine_diff('2007-02-06', '2000-02-07', 'P+6Y11M30DT0H0M0S', 2556); echo "test_years_negative__6_shy_1_day: "; examine_diff('2000-02-07', '2007-02-06', 'P-6Y11M28DT0H0M0S', 2556); The third argument in the examine_diff calls is used in the constructor call to DateInterval. The difference is whether the interval will be positive or negative. Note the difference of two days - if you add a positive interval, then 7 years minus 1 day is 6 years, 11 months and 30 days. If you add a negative interval, then 7 years minus 1 day is 6 years, 11 months and 28 days. Is there a good explanation for this behaviour (which applies both to DateTime::add and DateTime::sub)? I've tried searching the internals list but couldn't see any discussion of it. It seems like a bug that never got fixed to the point where there are tests to make sure things are still calculated wrong. Regards Peter -- <hype> WWW: plphp.dk / plind.dk CV: careers.stackoverflow.com/peterlind LinkedIn: plind Twitter: kafe15 </hype>