将Unix时间戳转换为时区



我有一个unix时间戳设置为+5,但我想将其转换为-5,EST标准时间。我只是让时间戳在那个时区生成,但我从另一个源获取它,这将它置于+5。

将当前未修改的时间戳转换为日期

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

使用日期时间和日期时区:

$dt = new DateTime('@1369490592');
$dt->setTimeZone(new DateTimeZone('America/Chicago'));
echo $dt->format('F j, Y, g:i a');

一个更简单的方法是:

当使用gmdate()时,将您的时区以秒为单位添加到gmdate中的unix_stamp。

假设我的时区是GMT+5:30。所以5 hr 30 min在秒内将是19800

那么,我将这样写:

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

下面是一个将unix/gmt/utc时间戳转换为所需时区的函数,您可能会感兴趣。

function unix_to_local($timestamp, $timezone){
    // Create datetime object with desired timezone
    $local_timezone = new DateTimeZone($timezone);
    $date_time = new DateTime('now', $local_timezone);
    $offset = $date_time->format('P'); // + 05:00
    // Convert offset to number of hours
    $offset = explode(':', $offset);
    if($offset[1] == 00){ $offset2 = ''; }
    if($offset[1] == 30){ $offset2 = .5; }
    if($offset[1] == 45){ $offset2 = .75; }
    $hours = $offset[0].$offset2 + 0;
    // Convert hours to seconds
    $seconds = $hours * 3600;
    // Add/Subtract number of seconds from given unix/gmt/utc timestamp
    $result = floor( $timestamp + $seconds );
    return $result;
}

因为John Conde回答的编辑队列已满,我将添加更详细的答案。

选自DateTime::__construct(string $time, DateTimeZone $timezone)

$timezone参数和当前时区被忽略$time参数可以是UNIX时间戳(例如@946684800)…

这就是为什么在从unix时间戳创建DateTime对象时应该始终指定时区(甚至默认)的主要原因。参见受John Conde的回答启发的解释代码:

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

相关内容

  • 没有找到相关文章

最新更新