Req #50075 [Opn->Wfx]: Provide single value difference in DateInterval->diff()

From: Date: Fri, 13 May 2022 10:31:28 +0000
Subject: Req #50075 [Opn->Wfx]: Provide single value difference in DateInterval->diff()
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-241478@lists.php.net to get a copy of this message
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


Thread (6 messages)

« previous php.bugs (#241478) next »