2

LastFM API を使用して、ユーザーが最近聴いたトラック ( http://www.last.fm/api/show/user.getRecentTracks ) を抽出していますが、タイムスタンプを好みのタイムゾーンに合わせるのに苦労しています。

コードの冒頭でdate_default_timezone_setを使用しましたが、 strtotimeを使用すると無視されるようです。Last.FM が提供するように日付のスタイルを再フォーマットできるように、strtotimeを使用しています。

$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>';
?>
4

1 に答える 1

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 で行うこともできますが、こちらの方がきれいに見えます)。

于 2012-10-03T04:38:44.583 に答える