正确更新时间戳的时区

时间:2012-10-03 03:31:40

标签: php xml last.fm

我正在使用LastFM API来提取用户最近收听的曲目(http://www.last.fm/api/show/user.getRecentTracks),并且我正在努力改变时间戳以匹配我的首选时区。

我在代码的开头使用了 date_default_timezone_set ,但是当我使用 strtotime 时,这似乎被忽略了。我正在使用 strtotime ,以便我可以重新格式化Date.FM提供日期的样式。

我已经想出如何通过 $ date - 14400 手动偏移到正确的时间,但我想了解我所缺少的内容并以正确的方式进行调整。

代码如下。非常感谢任何帮助。

<?php date_default_timezone_set('America/New York'); ?>
<?php $xml = simplexml_load_file("http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=rj&api_key=b25b959554ed76058ac220b7b2e0a026");
echo '<ul>';
foreach($xml->recenttracks->track as $track) {
    $title = $track->name;
    $date = $track->date;
    $date = strtotime($date);
    $date = date("F jS, g:i a e", $date);
    $string = '<li>'.$title.' - '.$date.'</li>';
    echo $string;}
echo '</ul>';
?>

1 个答案:

答案 0 :(得分:0)

问题是您设置的默认时区用于传入和传出翻译。

要解决,请使用PHP时区函数,并在读/写时间时将其翻转:

$oDateTime = new DateTime($track->date, new DateTimeZone(UTC'));
echo $oDateTime->format('F jS, g:i a e') . "\n";  // For debug: Will give the same back at you.

$oDateTime->setTimezone(new DateTimeZone('America/New York'));
$date = $oDateTime->format('Y-m-d H:i:sP') . "\n";   // Will give the converted date

(您也可以使用date_timesone_set,但这看起来更整洁)。