2012-03-01 5 views
1

私は、異なるタイムゾーンから来たRSSフィードを取り込むスクリプトを持っています。私はRSSフィードを「約10分前に投稿しました」と言っているツイッタースタイルの時間表示で公開します。しかし、私はこれらの時間をGMTのタイムゾーンに変換できないので、このディスプレイは間違った時間を表示します。例えば、ESTの投稿は、新しくなったときには常に「約5時間前」と表示されます。PHPでタイムゾーンを変換する

私は解決策を見いだすために探しましたが、それらのどれも私のためにはうまくいかないようです。私がどこに間違っているか教えていただけますか?

$dbTimezone = new DateTimeZone($dbStoredTimezone); //$dbStoredTimezone = 'EST' 
$dbDate = new DateTime($dbStoredDate, $dbTimezone); //$dbStoredDate = '2012-03-01 05:27:26' 
$gmtTimezone = new DateTimeZone('GMT'); 
echo $gmtTimezone->getOffset($dbDate); //always echo's 0 
$offset = DateInterval::createFromDateString ($gmtTimezone->getOffset($dbDate)); 
$dbDate->add($offset); 
+0

ここで赤いボックスを読んでください:http://www.php.net/manual/en/timezones.others.php – KingCrunch

+0

RSSフィードのpubDateがESTのタイムゾーン形式を使用しているため、問題になる可能性があります。 –

+0

まだ変更はありません私はESTをAmerica/New_Yorkに、GMTをEurope/Londonにハードコーディングすると、このように設定されているようなものではない。 –

答えて

1

問題はあなたの$gmtTimezone = new DateTimeZone('GMT');にあるようです。 getOffset()はGMTからオフセットを返します(http://www.php.net/manual/en/datetimezone.getoffset.php参照)。これは、常にそれが常に0を返す理由です。

DateTime::getOffset()メソッドを使用すると効果があります。

ここで編集したコードです:

<?php 
$dbTimezone = new DateTimeZone($dbStoredTimezone); //$dbStoredTimezone = 'EST' 
$dbDate = new DateTime($dbStoredDate, $dbTimezone); 
echo $dbDate->getOffset(); 
$offset = DateInterval::createFromDateString ($dbDate->getOffset()); 
$dbDate->add($offset); 

私の結果は-18000ですが。

+0

邪悪な感謝はそれだった多くの男です。私はまた、DateIntervalオブジェクトをどのように '$ offset = new DateInterval( 'PT'。str_replace( ' - '、 ''、$ dbDate-> getOffset()) ''に変更する必要がありました。しかし、私はこのソリューションは少しハッキーだと思う –

関連する問題