You might have a misconception as to how years are counted arround the 1 b.c and 1 a.d mark.
The last day month and year of before christus is 30th of december 1 b.c. Right after that follows the 1st January 1 a.d(Anno Domini). Historically speaking there is no year 0 it start's with year one.
Which means if we create DateTime Object and set a date to day=0, month=0, year=0 will still be in the before christus date region.
$test = new DateTime();
$test->setDate(0, 0, 0);
//I left out timezone settings so it'll take the default timezone
var_dump($test); exit;
would outup:
object(DateTime)#1 (3) { ["date"]=> string(20) "-0001-11-30 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" }
-0001-11-30 looks a bit weird since php counts months beginning with 0 = January, .... , 11 = December.
Now unlike the setDate method the constructor takes strings as a parameter which gets parsed into the Time Object. Which basically calls the set Date method at the end with the same
day = 0
month = 0
year = 0
which again would output:
object(DateTime)#1 (3) { ["date"]=> string(20) "-0001-11-30 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" }
This leads me to the conclusion that getting the out of the box DateTime Object Class to render the specific date "0000-00-00:00:00:00" is literary impossible and historically incorrect.
Could you please elaborate as to why you want to this in detail?