|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2010-01-19 13:24 UTC] yoarvi at gmail dot com
[2010-03-07 18:25 UTC] derick@php.net
-Status: Assigned
+Status: Closed
[2010-03-07 18:25 UTC] derick@php.net
[2010-03-07 18:25 UTC] derick@php.net
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Nov 03 12:00:02 2025 UTC |
Description: ------------ When you call the 'diff' function onto or from a DateTime object that did a 'sub' operation before, it will substract again the same amount of time from the DateTime object before calculating the difference, so neither the result nor the DateTime object will have the correct values. Reproduce code: --------------- <?php $date1 = date_create("2009-03-27"); $date2 = date_create("2009-03-01"); print "\$date1 at init: " . $date1->format("Y-m-d") . "\n"; print "\$date2 at init: " . $date2->format("Y-m-d") . "\n"; $diff = $date1->diff($date2); print "\$date1 after first diff: " . $date1->format("Y-m-d") . "\n"; print "\$diff->days after first diff: " . $diff->days . "\n"; $date1 = $date1->sub(new DateInterval("P2D")); print "\$date1 after sub: " . $date1->format("Y-m-d") . "\n"; $diff = $date1->diff($date2); print "\$date1 after second diff (called at \$date1): " . $date1->format("Y-m-d") . "\n"; print "\$diff->days after second diff: " . $diff->days . "\n"; $diff = $date2->diff($date1); print "\$date1 after third diff (called at \$date2): " . $date1->format("Y-m-d") . "\n"; print "\$diff->days after third diff: " . $diff->days . "\n"; ?> Expected result: ---------------- $date1 at init: 2009-03-27 $date2 at init: 2009-03-01 $date1 after first diff: 2009-03-27 $diff->days after first diff: 26 $date1 after sub: 2009-03-25 $date1 after second diff (called at $date1): 2009-03-25 $diff->days after second diff: 24 $date1 after third diff (called at $date2): 2009-03-25 $diff->days after third diff: 24 Actual result: -------------- $date1 at init: 2009-03-27 $date2 at init: 2009-03-01 $date1 after first diff: 2009-03-27 $diff->days after first diff: 26 $date1 after sub: 2009-03-25 $date1 after second diff (called at $date1): 2009-03-23 $diff->days after second diff: 22 $date1 after third diff (called at $date2): 2009-03-21 $diff->days after third diff: 20