'How can I create a zero DateTime with php?

I need to create an empty date with DateTime(). So, all zeros. The time should be displayed in that way: 0000:00:0:00:00.

What I have tried:

$date = new DateTime("2019-05-09 12:07");
$date->setTime(0, 0);
$date->setDate(0, 0, 0);
echo $date->format("Y:W:j:H:i");

That outputs

-0001:49:30:00:00

instead of 0000:00:0:00:00

What could I do to achieve a zero datetime?



Solution 1:[1]

More an explanation of what is going wrong than how to achieve what you are after - even if it is possible.

From a date point of view - 0 is invalid for both the month and day. In the manual it has the example

Example #2 Values exceeding ranges are added to their parent values

So if you have greater than the number of days in a month, it will make it the next month

In your case it is almost the opposite, having a number less than the start of the month. So 0 as the month and day, it will act as -1, so if you formatted it as

echo $date->format("Y:m:d:H:i");

the output is

-0001:11:30:00:00

So as you can see, the day and month are 0-1 (11 and 30) and this has overflowed into the year with -1.

Solution 2:[2]

No, You cannot make a datetime 0000:00:0:00:00 from DateTime()

php > echo (new DateTime("0000-00-00 00:00:00"))->format("Y-W-j H:i");
-0001-49-30 00:00
php > echo (new DateTime())->setISODate(0,0,0)->setTime(0,0,0,0)->format("Y-W-j H:i");
-0001-52-26 00:00

Solution 3:[3]

Surely Not..! although you can create any Date with PHP helper function (that uses DateTime class behind) any of you desire date with Zeor Time only

$date = date_create('now'); // or any '1970-01-01'
$date = date_format($date, 'Y-m-d 00:00:00');
// or
$date = date('Y-m-d 00:00:00', strtotime('2021-12-21'));
// or
$date = date('Y-m-d 00:00:00');

output: "2021-12-21 00:00:00"

Solution 4:[4]

you can initialize the time with current time and take difference of the current time after. its a trick you can perfom to get (0000-00-00 00:00:00).

$currentTime = new DateTime('NOW');

$diff = $currentTime->diff(new DateTime('NOW'));
echo $diff->format("%Y-%m-%d %H %i %s");

that will give you 0000-00-00 00:00:00

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Nigel Ren
Solution 2 LF00
Solution 3
Solution 4 Shehan Hasintha