php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #52798 dateTime => function diff => days KO
Submitted: 2010-09-08 17:19 UTC Modified: 2013-02-18 00:34 UTC
Votes:11
Avg. Score:4.5 ± 0.8
Reproduced:9 of 10 (90.0%)
Same Version:6 (66.7%)
Same OS:8 (88.9%)
From: ebinachon at pierre-vacances dot fr Assigned: derick (profile)
Status: No Feedback Package: Date/time related
PHP Version: 5.3.3 OS: windows xp
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2010-09-08 17:19 UTC] ebinachon at pierre-vacances dot fr
Description:
------------
I have a probleme with the function diff of dateTime.
When i do a test, the "days" result is always : 6015.
All the other informations ( Y, m, d, ... ) are correct.

Have-you an idea ?


Test script:
---------------
Exemple :
$date1 = new DateTime('2010-01-01');
$date2 = new DateTime('2010-03-13');
$interval = $date2->diff($date1);
Zend_Debug::dump($interval);
//OR 
Zend_Debug::dump($interval->format('%a'));

------------------

Result :
object(DateInterval)#174 (8) {
  ["y"] => int(0)
  ["m"] => int(2)
  ["d"] => int(12)
  ["h"] => int(0)
  ["i"] => int(0)
  ["s"] => int(0)
  ["invert"] => int(0)
  ["days"] => int(6015)
}

Expected result:
----------------
days => 71

Actual result:
--------------
days => 6015

Patches

52798 (last revision 2010-09-23 06:22 UTC by akabirov at rambler dot ru)
date_diff (last revision 2010-09-08 16:03 UTC by cataphract@php.net)

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-09-08 17:36 UTC] cataphract@php.net
-Status: Open +Status: Verified -Assigned To: +Assigned To: derick
 [2010-09-08 17:36 UTC] cataphract@php.net
I can reproduce only on Windows. The exactly value varies (seems to be garbage memory).
 [2010-09-08 18:03 UTC] cataphract@php.net
The following patch has been added/updated:

Patch Name: date_diff
Revision:   1283961826
URL:        http://bugs.php.net/patch-display.php?bug=52798&patch=date_diff&revision=1283961826
 [2010-09-08 18:12 UTC] cataphract@php.net
The problem was the call to floor().

The compiler gave a warning:
"d:\users\cataphract\documents\php-trunk\ext\date\lib\interval.c(57) : warning C4013: 'floor' undefined; assuming extern returning int"

The assumption is wrong, because it calls

double  __cdecl floor(_In_ double _X);

Which takes and returns a larger type.

I removed the call to floor, which is unnecessary since it's an integer division.

I also changed the call to abs to a call to llabs to avoid the conversion from long long to int and then to long long again.
 [2011-01-30 10:49 UTC] stas@php.net
-Status: Verified +Status: Feedback
 [2011-01-30 10:49 UTC] stas@php.net
Please try using this snapshot:

  http://snaps.php.net/php5.3-latest.tar.gz
 
For Windows:

  http://windows.php.net/snapshots/

Works fine for me with current SVN 5.3 HEAD.
 [2011-01-30 11:22 UTC] stas@php.net
Also, please try vc9 build.
 [2012-02-24 17:51 UTC] kissifrot at gmail dot com
Reproduced on PHP Win32 5.3.10 VC6, but not the VC9.
 [2013-02-18 00:34 UTC] php-bugs at lists dot php dot net
No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Open". Thank you.
 
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Sat Jul 31 19:01:27 2021 UTC