60

How do you create a DateTime from timestamp in versions less than < 5.3?

In 5.3 it would be:

$date = DateTime::createFromFormat('U', $timeStamp);

The DateTime constructor wants a string, but this didn't work for me

$date = new DateTime("@$timeStamp");
Yarin
  • 144,097
  • 139
  • 361
  • 489

4 Answers4

46

PHP 5 >= 5.3.0

$date = new DateTime();
$date->setTimestamp($timeStamp);

Edit: Added correct PHP version for setTimestamp

adrum
  • 138
  • 7
Dawid Ohia
  • 14,918
  • 21
  • 73
  • 92
31

Assuming you want the date and the time and not just the date as in the previous answer:

$dtStr = date("c", $timeStamp);
$date = new DateTime($dtStr);

Seems pretty silly to have to do that though.

Barry Simpson
  • 534
  • 3
  • 4
  • This solution works, but unnecessarily spends time formatting the date string, then re-parsing. – Jonah Oct 13 '15 at 17:34
14

It's not working because your $timeStamp variable is empty. Try echoing the value of $timeStamp right before creating the DateTime and you'll see. If you run this:

new DateTime('@2345234');

You don't get an error. However, if you run:

new DateTime('@');

It produces the exact error you said it gives you. You'll need to do some debugging and find out why $timeStamp is empty.

Jonah
  • 9,535
  • 5
  • 39
  • 74
  • 1
    Be warned, that using `@` in the constructor will ignore the environment's current timezone and the timezone when supplied in the second argument., even when using `$dateTime->modify('@' . 1234)` use `setTimezone(date_default_timezone_get())` to change from the UTC timezone to the environment timezone. – Will B. May 08 '15 at 18:45
  • I had this same problem when I used '@' with an empty timestamp, thanks for this answer. The error message PHP gave was less than helpful, it implied the '@' was the problem. – thomasrutter Oct 13 '15 at 04:55
3

The following works:

$dateString = date('Ymd', $timeStamp);
$date = new DateTime($dateString);
Yarin
  • 144,097
  • 139
  • 361
  • 489