2012-10-03 104 views
2

我正在使用LastFM API來提取用戶最近收聽的曲目(http://www.last.fm/api/show/user.getRecentTracks),並且正在努力將時間戳移至匹配我的首選時區。正確更新時間戳的時區

我用date_default_timezone_set在代碼的開始,但似乎被忽略,當我使用的strtotime。我正在使用strtotime,以便我可以重新格式化Last.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>'; 
?> 
+0

如果您共享日期字符串last.fm實際返回,對於我們這些不使用它的人來說會很有幫助......但是,看起來他們會在'中提供UTS時間戳'作爲一個屬性,所以不需要時間 - 你已經得到了解析日期GMT-0 –

+0

謝謝,馬克。返回的日期字符串的示例是2012年10月3日,03:47_。 – LowVelocity

回答

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做到這一點,但是這看起來更整潔)。

+0

謝謝,這看起來會很有幫助。 – LowVelocity