ID: 40691 Comment by: dzuelke at gmail dot com Reported By: hans at velum dot net Status: Open Bug Type: Date/time related Operating System: Gentoo Linux PHP Version: 5.2.1 New Comment:
hans at velum dot net is correct, I just stumbled over the same issue. It definitely smells like a bug, nothing bogus here. The stored date is a property of the object, but not compared properly as it should according to the rules described at http://php.net/manual/en/ language.oop5.php. Probably because it's not possible to pull the individual parts of a date (day, month, year etc) from a DateTime instance, but that's a different story... Previous Comments: ------------------------------------------------------------------------ [2007-03-03 19:47:15] hans at velum dot net This is not bogus. Maybe "won't fix" but definitely not bogus. Please note that I am quite familiar with object comparison in PHP. The documenation says: "When using the comparison operator (==), object variables are compared in a simple manner, namely: Two object instances are equal if they have the same attributes and values, and are instances of the same class." Indeed, AS I POINTED OUT IN THE DESCRIPTION, other built-in objects in PHP demonstrate the correct/expected behavior: $a = new Exception("foo"); $b = new Exception("bar"); $c = new Exception("foo"); var_export($a == $b); // Outputs: FALSE var_export($a == $c); // Outputs: TRUE A DateTime object have very obvious properties (namely the date/time value contained, possibly time zone of other info specified). The equality check (NOT IDENTITY CHECK) should be comparing those values, as apparently it does for Exception. ------------------------------------------------------------------------ [2007-03-03 15:55:40] [EMAIL PROTECTED] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php Read on object comparison in PHP, what you are attempting will not work. if you want to compare 2 dates, convert them to unix timestamps first. ------------------------------------------------------------------------ [2007-03-02 15:43:14] hans at velum dot net Description: ------------ The equality check (==) for DateTime objects does not actually check the properties of the object (i.e. the internally stored date). This is very counter-intuitive as it does not follow the behavior of user-created objects or even other internal PHP objects like Exception. Reproduce code: --------------- $d1 = new DateTime("2001-01-01"); $d2 = new DateTime("2007-02-28"); print "DateTime Equal? " . var_export($d1 == $d2, true) . "\n"; Expected result: ---------------- DateTime Equal? false Actual result: -------------- DateTime Equal? true ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40691&edit=1
