Edit report at https://bugs.php.net/bug.php?id=50075&edit=1
ID: 50075
Updated by: derick@php.net
Reported by: RQuadling at GMail dot com
Summary: Provide single value difference in
DateInterval->diff()
-Status: Open
+Status: Wont fix
Type: Feature/Change Request
Package: Date/time related
Operating System: Irrelevant
PHP Version: 5.3.1RC3
Block user comment: N
Private report: N
New Comment:
I am marking this as "Won't Fix". If this is still an issue, please open a new ticket
at https://github.com/php/php-src/issues/
Previous Comments:
------------------------------------------------------------------------
[2013-07-03 16:07:44] aharvey@php.net
Related To: Bug #65189
------------------------------------------------------------------------
[2009-11-04 16:03:12] RQuadling at GMail dot com
Which would suggest to me that DateTime->diff() has a bug.
Personally, if I'm asking for the difference between 2 dates, the
physical time between them would be what I would expect to be reported.
So, when checking over DST, the result could be 23 hours (GMT->BST) or 1
day + 1 hour (BST -> GMT).
Neither are 1 day.
------------------------------------------------------------------------
[2009-11-04 15:56:14] derick@php.net
DST is relevant because the following will show "one day", but it is not 86400 seconds:
<?php
date_default_timezone_set( "Europe/London" );
$a = new DateTime( "2009-10-25 00:00" );
$b = new DateTime( "2009-10-26 00:00" );
$d = $a->diff( $b );
echo $d->format( '%d %h:%i:%s' ), "\n";
echo $b->format( 'U' ) - $a->format( 'U' ), "\n";
echo $a->format( DateTime::ISO8601 ), "\n";
echo $b->format( DateTime::ISO8601 ), "\n";
?>
------------------------------------------------------------------------
[2009-11-04 15:43:34] RQuadling at GMail dot com
I'm not sure how DST is relevant here. DateInterval will already have worked out the difference
in days, hours, mins, etc. All I'm providing is a total number of seconds.
I take on the issue with invert, but it does mean having to do some userland calcs.
diff -> seconds. Yep. Obviously.
Index: php_date.c
===================================================================
--- php_date.c (revision 290198)
+++ php_date.c (working copy)
@@ -2245,6 +2245,15 @@
PHP_DATE_INTERVAL_ADD_PROPERTY("s", s);
PHP_DATE_INTERVAL_ADD_PROPERTY("invert", invert);
PHP_DATE_INTERVAL_ADD_PROPERTY("days", days);
+
+ MAKE_STD_ZVAL(zv);
+ ZVAL_LONG(zv, (((((
+ intervalobj->diff->days * 24) +
+ intervalobj->diff->h) * 60) +
+ intervalobj->diff->i) * 60) +
+ intervalobj->diff->s
+ );
+ zend_hash_update(props, "seconds", 8, &zv, sizeof(zval), NULL);
return props;
}
------------------------------------------------------------------------
[2009-11-04 15:09:16] derick@php.net
This patch is not correct, because it doesn't take care of daylight savings time nor should
"invert" being taken into account as it's already a seperate field. I wouldn't
call it "diff" either, but "seconds" just like there is "days".
------------------------------------------------------------------------
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
https://bugs.php.net/bug.php?id=50075
--
Edit this bug report at https://bugs.php.net/bug.php?id=50075&edit=1