ID: 49778 Comment by: hellbringer at gmail dot com Reported By: jenwelsh at yahoo dot com Status: Assigned Bug Type: Date/time related Operating System: Solaris 10 PHP Version: 5.3.0 Assigned To: derick New Comment:
$d1 = new DateTime('2010-01-01'); $d2 = new DateTime('2010-01-26'); $diff = $d1->diff($d2); echo phpversion(); // 5.3.1 echo $_SERVER['SERVER_SOFTWARE']; // Apache/2.2.11 (Win32) PHP/5.3.1 echo $diff->format('%a'); // 6015 echo $diff->days; // 6015 print_r($diff); // DateInterval Object // ( // [y] => 0 // [m] => 0 // [d] => 25 // [h] => 0 // [i] => 0 // [s] => 0 // [invert] => 0 // [days] => 6015 // ) Previous Comments: ------------------------------------------------------------------------ [2009-11-17 19:23:01] awinningidea at gmail dot com PHP 5.3 on windows, DateInterval::format('%a') gives 6015 for all dates. Example =============================== $d1 = new DateTime('1/1/2009'); $d2 = new DateTime('1/5/2009'); $diff = $d1->diff($d2); var_dump($diff->format('%a')); Output ------------------------------- string '6015' (length=4) ------------------------------------------------------------------------ [2009-10-05 18:49:57] der...@php.net It's a bug, it should set this value really. ------------------------------------------------------------------------ [2009-10-05 16:31:59] sjo...@php.net Derick, how would you solve this? ------------------------------------------------------------------------ [2009-10-05 16:29:44] sjo...@php.net Thank you for your bug report. Days is indeed not set when creating a DateInterval using the constructor. A complication with this is that it is impossible to determine the number of days when months or years are specified, since these vary in length. It is possible to fill in the days field in some cases and leave it 0 in others. In any case, it should be documented that the days field is not always available. ------------------------------------------------------------------------ [2009-10-05 14:37:27] jenwelsh at yahoo dot com DateInterval::format with %a format does work if the DateInterval is the result of getting the difference between two DateTime objects: $d1=date_create('2009-11-02'); $d2=date_create('2009-11-09'); $i=$d2->diff($d1); echo $i->format("%d");//7 echo $i->format("%a");//7 ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/49778 -- Edit this bug report at http://bugs.php.net/?id=49778&edit=1