Hi Derick, I came across with strange DataTime generates legal date from illegal date. http://3v4l.org/rKFIg
<?php $date = new DateTime('0000-00-00'); var_dump($date->format('Y-m-d H:i:s')); $date = new DateTime('0000-01-00'); var_dump($date->format('Y-m-d H:i:s')); $date = new DateTime('0000-00-01'); // "-0001-12-01 00:00:00" legal date from illegal date var_dump($date->format('Y-m-d H:i:s')); $date = new DateTime('0000-01-01'); var_dump($date->format('Y-m-d H:i:s')); $date = new DateTime('0001-00-00'); var_dump($date->format('Y-m-d H:i:s')); // "-0002-11-30 00:00:00" legal date from illegal $date = new DateTime('0001-01-00'); var_dump($date->format('Y-m-d H:i:s')); // "-0002-12-31 00:00:00" legal date from illegal $date = new DateTime('0001-00-01'); var_dump($date->format('Y-m-d H:i:s')); // "-0002-12-01 00:00:00" legal date from illegal $date = new DateTime('-0001-00-00'); var_dump($date->format('Y-m-d H:i:s')); // "-0002-11-30 00:00:00" legal date from illegal $date = new DateTime('-0001-01-00'); var_dump($date->format('Y-m-d H:i:s')); // "-0002-12-31 00:00:00" legal date from illegal $date = new DateTime('-0001-00-01'); var_dump($date->format('Y-m-d H:i:s')); // "-0002-12-01 00:00:00" legal date from illegal $date = new DateTime('0001-01-01'); // Correct date var_dump($date->format('Y-m-d H:i:s')); $date = new DateTime('-0001-01-01'); // Correct date var_dump($date->format('Y-m-d H:i:s')); ?> DateTime raises exceptions like month 13 or day 32, but not for some illegal dates. It seems this behavior is fixed/changed in 5.2.4 partially. I was about to report this behavior as a bug, but I thought it may be better to ask here the reason why it behaves like this. Is there reason that some illegal dates are allowed and result in strange date? One reason I can think of is MySQL. MySQL converts illegal date to 0000-00-00. All the above script's output is out of MySQL DateTime/TimeStamp range, so they are converted 0000-00-00 under MySQL. Even if PHP DateTime supports 0000-00-00 as invalid date, why don't make it return 0000-00-00 when input is 0000-00-00? Since these illegal dates are rather obvious, I thought there might be some reasons behind. ext/date/tests/bug41523-64bit.phpt ext/date/tests/bug41523.phpt These 2 tests use 0000-00-00 and expects the strange date. ext/date/tests/bug62852_var3.phpt This test unseliaizes 0000-00-00 date and raises exception. I see controversial behavior here, unserialize raises error while new DateTime('0000-00-00') doesn't. If it's a bug, I'll just file it as a bug. Thank you. Regards, -- Yasuo Ohgaki yohg...@ohgaki.net