2009-06-16 13 views
6

Zend_Dateを使って日付を表示するアプリケーションがあります。 Zend_Dateインスタンスは、MySQLのdatetimeデータ、ユーザー入力、現在の日付を使用して作成されます。Zend_Dateで日付と時間帯を扱う

ユーザーが自分のタイムゾーンを指定し、すべての日付をローカル時間で表示できるようにしたいと考えています。現時点では私のコードは次のように動作し

$date = '2009-01-01 10:30:00'; 

$date = new Zend_Date($date, Zend_Date::ISO_8601); 

echo $date->get(Zend_Date::TIME_MEDIUM); //10:30:00 

$date->setTimezone('Australia/ACT'); 

echo $date->get(Zend_Date::TIME_MEDIUM); //21:30:00 

これは動作しますが、すべての日ににsetTimezoneコールが必要です。タイムゾーンを管理する簡単な方法はありますか?

私はまた、MySQLで調整されたデータを返すために、SET time_zoneをMySQLで使用することを検討しています。その後、PHPスクリプト内で作成された日付をタイムゾーン用に調整するだけで済みます。

私は誰かが経験を持っている場合、これを処理する最善の方法を聞いて欲しいです。

おかげ

答えて

7

私はPHPのタイムゾーンを設定すると、後続のすべてのZend_Dateのインスタンスのデフォルトを設定するべきだと思います。 Zend_Date section in the Zend Framework Reference Guideから

date_default_timezone_set('Europe/Vienna'); 

:たとえば

PHPでは、私たちは、ユーザーの期待に応じてデフォルトのタイムゾーンを設定することにより、特定のユーザーのために働くすべての日付と時刻関連の関数を調整することができます。 Zend_Dateインスタンスを作成すると、そのタイムゾーンは自動的に現在のデフォルトタイムゾーンになります!

+2

ありがとうございました。 UTCをデフォルトとして設定し、内部的にUTC datetimeで作業し、setTimezoneを使用してタイムゾーン固有のローカル時刻を生成するのが最善の方法です。 –

1

私はあなたがZend_Localeを利用することができ、それについてのいくつかのドキュメントを読んで、それを動作させることができると確信しています。一方、Zend_CacheとZend_Locale/Zend_Dateを使用すると、スピードをかなり向上させるのに役立ちます。 zendフレームワークのドキュメントでも使用例があります。

関連する問題