241

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?

10 Answers 10

403

Try gmdate like this:

<?php
$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>
Sign up to request clarification or add additional context in comments.

8 Comments

Please not that gmdate() returns the date/time in GMT. date() will return the local date/time.
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.
@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)
@KasparL.Palgi You would have to divide the timestamp by 1000 to get proper year, as this timestamp is stored in milliseconds.
|
148

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
?>

6 Comments

how can i convert specific timestamp with 'c'? for example 1333699439
this doesnt work date("Y-m-d\TH:i:s\Z",1333699439) i got 2012-04-06EDT04:03:59-14400
@Ahmet - Note use of double and single quotes when defining the string
@user2060451 anything preceded by a backslash is shown as the literal character in the resulting time string
@user2060451: Z is supposed to indicate UTC time (in which case gmdate should be used...) Check out ISO8601 info on your favourite research resource.
|
76

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

3 Comments

how can i convert specific timestamp with this? for example 1333699439
@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.
@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
28

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

1 Comment

In ISO8601, Z is used to indicate that it is a UTC time, so the timezone should be set to UTC
27
<?php
$timestamp=1486830234542;
echo date('Y-m-d H:i:s', $timestamp/1000);
?>

6 Comments

Works without the divide part. Otherwise the date defaults to 1970.
This works on me. Idk why others says it doesn't work. Prob because I'm using PHP7.2?
@LapiztheProgrammer yeah its depend on PHP versions
I'm getting the value from the external API where it looks like: '1623923723000'. In this case, the dividing part is necessary to get the correct date: '2021-06-17 11:55:23'. Thanks for sharing the solution.
The value must be in milliseconds. date must be assuming a unix timestamp in seconds.
|
9

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');

Comments

7
$unixtime_to_date = date('jS F Y h:i:s A (T)', $unixtime);

This should work to.

Comments

6

You can do like as.....

$originalDate = "1585876500";

echo $newDate = date("Y-m-d h:i:sa", date($originalDate));

Comments

4

most people doesn't read comment, and there is problem with gmdate() in accepted answer, it return time in GMT, so if we use date_default_timezone_set(zone) it will not work, instead use date().

<?php

$ts = 1664706166;
$date = date('Y-m-d H:i:s', $ts);
$gmdate = gmdate('Y-m-d H:i:s', $ts);
echo  "date()  : $date\n";
echo  "gmdate(): $gmdate\n\n";

date_default_timezone_set("Asia/Jakarta");
$date = date('Y-m-d H:i:s', $ts);
$gmdate = gmdate('Y-m-d H:i:s', $ts);
echo  "date()  : $date\n";
echo  "gmdate(): $gmdate <- GMT\n";

/* result
date()  : 2022-10-02 10:22:46
gmdate(): 2022-10-02 10:22:46

After set timezone
date()  : 2022-10-02 17:22:46
gmdate(): 2022-10-02 10:22:46 <- GMT
*/

Comments

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.