219

Using PHP, I want to convert UNIX timestamps to date strings similar to this: 2008-07-17T09:24:17Z

How do I convert a timestamp such as 1333699439 to 2008-07-17T09:24:17Z?

Xenon
  • 3,128
  • 17
  • 37
Utku Dalmaz
  • 8,957
  • 27
  • 87
  • 124

9 Answers9

370

Try gmdate like this:

<?php
$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>
Flimm
  • 115,689
  • 38
  • 227
  • 240
stewe
  • 40,424
  • 13
  • 77
  • 74
  • 75
    Please not that `gmdate()` returns the date/time in GMT. `date()` will return the local date/time. – Matt K Dec 10 '15 at 16:37
  • 8
    Above comment doesn't make sense in this context. Using date with the second parameter as timestamp, as shown in answer, will not print the date in local timezone. Date will be printed with timezone info ignored, cause the timestamp doesn't have timezone info. gmdate and date with second timestamp parameter as 1333699439 will print the same date time. – Tinus Tate Apr 07 '16 at 13:09
  • 2
    @MattK: Which makes sense, since Z indicate UTC. Tinus: Unix timestamps do not contain timezone offsets. `date` and `gmdate`'s output will differ based on the TZ variable (on *nix at least) – Gert van den Berg May 03 '16 at 14:05
  • You can check this http://www.phpzag.com/convert-unix-timestamp-to-readable-date-time-in-php/ – Laeeq May 04 '17 at 08:08
  • It would also be nice if this answer included the solution for the opposite problem, converting a formatted date to UNIX time. – Olle Härstedt Sep 14 '18 at 14:20
  • `$date = new DateTime('2018-01-01 00:00:00'); $date->format('U');` – Olle Härstedt Sep 14 '18 at 14:30
  • PHP v5.6 generates from timestamp 1540426286647 -> 50784-03-01 but should be 2018-10-25. When using gmdate('Y-m-d', $lastmodifieddate_ts); – Kaspar L. Palgi Oct 25 '18 at 00:34
  • 1
    @KasparL.Palgi You would have to divide the timestamp by 1000 to get proper year, as this timestamp is stored in milliseconds. – Wadih M. Jul 01 '20 at 09:43
131

use date function date ( string $format [, int $timestamp = time() ] )

Use date('c',time()) as format to convert to ISO 8601 date (added in PHP 5) - 2012-04-06T12:45:47+05:30

use date("Y-m-d\TH:i:s\Z",1333699439) to get 2012-04-06T13:33:59Z

Here are some of the formats date function supports

<?php
$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today = date("m.d.y");                         // 03.10.01
$today = date("j, n, Y");                       // 10, 3, 2001
$today = date("Ymd");                           // 20010310
$today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$today = date("H:i:s");                         // 17:16:18
?>
Sandeep Manne
  • 5,800
  • 5
  • 38
  • 54
63

Assuming you are using PHP5.3 then the modern way of handling dates is via the native DateTime class. To get the current time you can just call

$currentTime = new DateTime();

To create a DateTime object from a specific timestamp (i.e. not now)

$currentTime = DateTime::createFromFormat( 'U', $timestamp );

To get a formatted string you can then call

$formattedString = $currentTime->format( 'c' );

See the manual page here

liquorvicar
  • 5,903
  • 1
  • 14
  • 20
  • 2
    how can i convert specific timestamp with this? for example 1333699439 – Utku Dalmaz Apr 06 '12 at 07:17
  • 1
    @Norse Of course I read his post. All the info he needed was in my post. All he had to do was read the PHP docs for the DateTime object. I've edited my post to make it even clearer. The DateTime object is the way to go in PHP and all newbies should be encouraged to use it. As yet, I'm the only one who's provided that answer. Btw I find your comment a bit aggressive and not quite in the spirit of SO. – liquorvicar Apr 06 '12 at 07:34
  • 1
    @Ahmetvardar See my edit although all this is in the PHP docs to which I provided a link. I strongly urge you to start using the DateTime object. It provides excellent support for dates/times including timezones etc – liquorvicar Apr 06 '12 at 07:35
21

It is very important to set a default timezone to get the correct result

<?php
// set default timezone
date_default_timezone_set('Europe/Berlin');

// timestamp
$timestamp = 1307595105;

// output
echo date('d M Y H:i:s Z',$timestamp);
echo date('c',$timestamp);
?> 

Online conversion help: http://freeonlinetools24.com/timestamp

klit67
  • 525
  • 5
  • 4
20
<?php
$timestamp=1486830234542;
echo date('Y-m-d H:i:s', $timestamp/1000);
?>
sunil
  • 781
  • 13
  • 25
7
$unixtime_to_date = date('jS F Y h:i:s A (T)', $unixtime);

This should work to.

5

The DateTime class takes a string in the constructor. If you prefix the timestamp with a @-character you create a DateTime object with the timestamp. For formating use the 'c' format ... a predefined ISO 8601 compound format.

If could use the DateTime class like this ... set the right timezone or leave it out if you want a UTC time.

$dt = new DateTime('@1333699439');
$dt->setTimezone(new DateTimeZone('America/New_York'));
echo $dt->format('c');
Team EJ
  • 61
  • 1
  • 2
4

You can do like as.....

$originalDate = "1585876500";

echo $newDate = date("Y-m-d h:i:sa", date($originalDate));
THess
  • 993
  • 1
  • 10
  • 21
1

I found the information in this conversation so helpful that I just wanted to add how I figured it out by using the timestamp from my MySQL database and a little PHP

 <?= date("Y-m-d\TH:i:s\+01:00",strtotime($column['loggedin'])) ?>

The output was: 2017-03-03T08:22:36+01:00

Thanks very much Stewe you answer was a eureka for me.

Samuel Ramzan
  • 1,660
  • 1
  • 15
  • 24