Reputation: 6029
I have a timestamp stored in a session (1299446702).
How can I convert that to a readable date/time in PHP? I have tried srttotime, etc. to no avail.
Upvotes: 312
Views: 856576
Reputation: 4164
Starting from PHP 8.4 which was officially released on November 21, 2024 you can use:
$dt = DateTimeImmutable::createFromTimeStamp(1732779543);
$dt->format('Y-m-d'); // "2024-11-28"
Upvotes: 1
Reputation: 41
If you want to correctly convert a timestamp into an input value, then do the following:
<?= date('Y-m-d', 1730332800); ?>
Upvotes: 0
Reputation: 5266
None of the above answers work properly if the default time zone of your PHP server is not GMT.
For example. Consider this code that round trips a date to a timestamp and back.
$d0 = new \DateTimeImmutable('1/1/2023');
echo 'Formatted Jan 1, 2023 date = '.$d0->format('Y-m-d H:i:s').'<br>';
$t0 = $d0->getTimestamp();
echo 'Unix timestamp = '.$t0.'<br>';
$d1 = new \DateTimeImmutable('@'.$t0);
echo 'Date from timestamp = '.$d1->format('Y-m-d H:i:s').'<br>';
You would expect the round tripped date to be identical to the original date. Wrong! Output is as follows:
Formatted Jan 1, 2023 date = 2023-01-01 00:00:00
Unix timestamp = 1672556400
Date from timestamp = 2023-01-01 07:00:00
This is because the server time zone is America/Arizona. The documentation clearly states that if a DateTime or DateTimeImmutable object is created from a Unix timestamp, the default time zone or a provided time zone is ignored. (Why?! Why?! Why?!)
To fix this, you need to add this...
$d2 = $d1->setTimeZone(new \DateTimeZone(date_default_timezone_get()));
echo 'Corrected date from timestamp = '.$d2->format('Y-m-d H:i:s').'<br>';
Which outputs this:
Corrected date from timestamp = 2023-01-01 00:00:00
This nails me about every year. Just now I spent 2 hours trying to figure out why my times are all wrong. I went to my test bench and behold! there is my solution to this problem from a year ago. PHP. pfffft.
Upvotes: 1
Reputation: 310
I have used this:
<?php echo date('d/m/Y H:i a', $row['start_time']); ?>
Upvotes: 1
Reputation: 656
If anyone wants timestamp conversion directly to a DateTime object, there's a simple one-liner:
$timestamp = 1299446702;
$date = DateTime::createFromFormat('U', $timestamp);
Following @sromero comment, timezone parameter (the 3rd param in DateTime::createFromFormat()) is ignored when unix timestamp is passed, so the below code is unnecessary.
$date = DateTime::createFromFormat('U', $timestamp, new DateTimeZone('UTC'); // not needed, 3rd parameter is ignored
You may check PHP's manual for DateTime::createFromFormat for more info and options.
Upvotes: 25
Reputation: 1221
If you are using PHP date()
, you can use this code to get the date, time, second, etc.
$time = time(); // you have 1299446702 in time
$year = $time/31556926 % 12; // to get year
$week = $time / 604800 % 52; // to get weeks
$hour = $time / 3600 % 24; // to get hours
$minute = $time / 60 % 60; // to get minutes
$second = $time % 60; // to get seconds
Upvotes: 25
Reputation: 447
$epoch = 1483228800;
$dt = new DateTime("@$epoch"); // convert UNIX timestamp to PHP DateTime
echo $dt->format('Y-m-d H:i:s'); // output = 2017-01-01 00:00:00
In the examples above "r" and "Y-m-d H:i:s" are PHP date formats, other examples:
r ----- Wed, 15 Mar 2017 12:00:00 +0100 (RFC 2822 date)
c ----- 2017-03-15T12:00:00+01:00 (ISO 8601 date)
M/d/Y ----- Mar/15/2017
d-m-Y ----- 15-03-2017
Y-m-d H:i:s ----- 2017-03-15 12:00:00
Upvotes: 20
Reputation: 983
$timestamp = 1465298940;
$datetimeFormat = 'Y-m-d H:i:s';
$date = new \DateTime();
// If you must have use time zones
// $date = new \DateTime('now', new \DateTimeZone('Europe/Helsinki'));
$date->setTimestamp($timestamp);
echo $date->format($datetimeFormat);
result: 2016-06-07 14:29:00
Other time zones:
Upvotes: 78
Reputation: 51
echo 'Le '.date('d/m/Y', 1234567890).' à '.date('H:i:s', 1234567890);
Upvotes: 5
Reputation: 39484
Unless you need a custom date and time format, it's easier, less error-prone, and more readable to use one of the built-in date time format constants:
echo date(DATE_RFC822, 1368496604);
Upvotes: 9
Reputation: 51
echo date("l M j, Y",$res1['timep']);
This is really good for converting a unix timestamp to a readable date along with day. Example:
Thursday Jul 7, 2016
Upvotes: 5
Reputation: 725
You can try this:
$mytimestamp = 1465298940;
echo gmdate("m-d-Y", $mytimestamp);
Output :
06-07-2016
Upvotes: 9
Reputation: 363
Try it.
<?php
$timestamp=1333342365;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>
Upvotes: 17
Reputation: 13868
I just added H:i:s to Rocket's answer to get the time along with the date.
echo date('m/d/Y H:i:s', 1299446702);
Output: 03/06/2011 16:25:02
Upvotes: 90
Reputation: 227310
Use PHP's date()
function.
Example:
echo date('m/d/Y', 1299446702);
Upvotes: 488
Reputation: 191809
strtotime makes a date string into a timestamp. You want to do the opposite, which is date. The typical mysql date format is date('Y-m-d H:i:s');
Check the manual page for what other letters represent.
If you have a timestamp that you want to use (apparently you do), it is the second argument of date()
.
Upvotes: 101