Bug #74885 [Opn]: Wrong behaviour when comparing dates with microseconds
| From: | requinix@php.net | Date: | Sun, 09 Jul 2017 14:57:56 +0000 |
| Subject: | Bug #74885 [Opn]: Wrong behaviour when comparing dates with microseconds | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-209936@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=74885&edit=1
ID: 74885
Updated by: requinix@php.net
Reported by: marcospassos dot com at gmail dot com
Summary: Wrong behaviour when comparing dates with
microseconds
Status: Open
Type: Bug
Package: Date/time related
PHP Version: 7.1.7
-Assigned To:
+Assigned To: derick
Block user comment: N
Private report: N
New Comment:
Surely assertTrue($expected == $date) is simpler?
Anyway, it's a floating-point issue where 0.456789 + .000001 != 0.456790
@derick can say whether this is a bug to fix or not.
As a workaround you can compare YmdHisu strings, which will have the 'u' part rounded to 6
places. https://3v4l.org/YlCDm
Previous Comments:
------------------------------------------------------------------------
[2017-07-09 14:30:45] marcospassos dot com at gmail dot com
Description:
------------
Modifying the microsecond part of a DateTime leads to wrong behavior in comparison operators.
Test script:
---------------
$expected = new DateTimeImmutable('2015-08-31 01:02:04.456790');
$date = (new DateTimeImmutable('2015-08-31 01:02:03.456789'))->modify('+1000001
microseconds');
// Expected false, but it's actually true
assertFalse($expected > $date || $expected < $date);
Expected result:
----------------
True
Actual result:
--------------
False
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=74885&edit=1