Convert Unix Timestamp to time zone?

2019-02-04 17:53发布

I have a unix timestamp that is set to +5, but I'd like to convert it to -5, EST Standard time. I would just make the time stamp be generated in that time zone, but I'm grabbing it from another source which is putting it at +5.

Current Unmodified Timestamp Being Converted Into A Date

<? echo gmdate("F j, Y, g:i a", 1369490592) ?>

3条回答
在下西门庆
2楼-- · 2019-02-04 18:19

As because edit queue for John Conde's answer is full I'll add more detailed answer.

From DateTime::__construct(string $time, DateTimeZone $timezone)

The $timezone parameter and the current timezone are ignored when the $time parameter either is a UNIX timestamp (e.g. @946684800)…

This is the main reason why you should always specify timezone, even default, when creating DateTime objects from unix timestamp. See explained code inspired by John Conde's answer:

$dt = new DateTime('@1369490592');

// use your default timezone to work correctly with unix timestamps
// and in line with other parts of your application
date_default_timezone_set ('America/Chicago'); // somewhere on bootstrapping time
…
$dt->setTimeZone(new DateTimeZone(date_default_timezone_get()));

// set timezone to convert time to the other timezone
$dt->setTimeZone(new DateTimeZone('America/Chicago'));

echo $dt->format('F j, Y, g:i a');
查看更多
淡お忘
3楼-- · 2019-02-04 18:22

Use DateTime and DateTimeZone:

$dt = new DateTime('@1369490592');
$dt->setTimeZone(new DateTimeZone('America/Chicago'));
echo $dt->format('F j, Y, g:i a');
查看更多
相关推荐>>
4楼-- · 2019-02-04 18:22

An easier way to do that is:

While using gmdate(), add your time zone in seconds to unix_stamp in gmdate.

Consider my time zone is GMT+5:30. So 5 hr 30 min in seconds will be 19800

So, I'll do this:

gmdate("F j, Y, g:i a", 1369490592+19800)

查看更多
登录 后发表回答