2009-06-18 5 views
0

phpで日付と時刻のマッサージを行う方法はたくさんあるようです。私はたいてい地元の時間を扱うだけです。今日、私はUTCで働く必要があります。私はAPIに対してクエリを実行していますGMTオフセットに使用するphpの日時ツール

、任意のレコードに関する彼らは私を与えるデータは次のとおりです。 が作成:木、2009年6月18日午後9時44分49秒0000 は*

「UTCレコードの作成時刻」として文書化

utc_offset:-28800 *ユーザーの違い

データを現地時間で送信した日時をユーザーに表示するには、単純な文字列に変換する必要があります。

私はカリフォルニア州であれば上記に変換たとえば、信じて:私の目標は、時間の値を取得することである2009年6月の 木曜日の18日午前2時44分49秒PM

私は(これまでに渡すことができます) "簡単な"フォーマットで簡単にフォーマットすることができます。

上記の作成された時間をエポックから秒単位に変換し、オフセットを追加し、それをdate()に渡すのと同じくらい簡単ですか?どんなゴスチャが目を引くの?

$created_time = 'Thu, 18 Jun 2009 21:44:49 +0000'; 
$utc_offset = -28800; 
$seconds = strtotime($created_time); 
$localized_time = $seconds + $utc_offset; 

echo date(DATE_RFC822, $localized_time); 

おかげで

答えて

2

PHPはあなたのために自動的にことを行う必要があります。代わりにDateTimeオブジェクトを使用することを強くお勧めします。

$dt = new DateTime($created_time); echo $dt->format(DATE_RFC2822);

PHPの日付と時刻の関数は、タイムゾーンを認識している。..作品の多くは、これらのシステムを改善する上で行われているので、あなたがPHPの最新バージョンにしていることを確認してください。

+0

ありがとうございました。 DateTimeオブジェクトのマニュアルはかなり深く、私は検討します。私はまだ後に、オフセットを正しく処理する方法です。 私は、ドキュメントから、$ created_timeのUTC値を想定しています。私が与えた他の唯一の日付/時刻値はオフセットです。ユーザーデータは世界各地から来ていますが、オフセットはどのゾーンにあるかによって異なります。 オブジェクトを数秒間に移動してオフセットを追加し、それをかなりの文字列に変換するとしますか? –

+0

アイデアはDateTimeとstrtotimeの両方を使用しているため、標準形式でタイムゾーンを指定すると、タイムゾーンを取得して、指定したタイムゾーンに自動的に変換します。 もう1つの方法は、デフォルトのタイムゾーンを一時的に変更する方法と、DateTimeオブジェクトにDateTimeZoneオブジェクトを与える方法です( – Evert

0

date_default_timezone_setを使用してタイムゾーンを切り替えることができます。あなたの場合、ユーザーのプロファイルからタイムゾーン情報を渡します。 Evertが推奨するように、PHP 5> = 5.2を使用している場合は、より高度なDateTimeクラスを使用してください。

<?php 
echo date('h:i:s')."\n"; 
date_default_timezone_set('Europe/Paris'); 
echo date('h:i:s')."\n"; 
date_Default_timezone_set('UTC'); 
echo date('h:i:s')."\n"; 
+0

ありがとうございました)。私はオフセットを取得するだけで、私が取得するタイムゾーンデータは、PHPの "サポートされているタイムゾーンのリスト"の方法でフォーマットされていません。私はむしろそのデータをマッサージしないで、変化する危険を冒しています。 オフセットを取って、それを "date_default_timezone_set()"の各値にマッピングするとどう思いますか?あるいは、おそらく私が逃している機能が既にありますか? –

+3

オフセットがある場合は、時間単位に変換して、次のいずれかのタイムゾーンを使用してください:http://us2.php.net/manual/en/timezones.others.php。あなたの例では、$ utc_offset = -28800; (-28800/3600)= -8なので、 'Etc/GMT-8'はあなたが望むものです。 –

関連する問題