3

私は、他の国を対象とした Web アプリケーションを開発中です。

さて、私の考えを説明するために、私は次のようなことを考えていました:

// Illustrates the current time on my server
$time = new DateTime();
echo $time->format("Y-m-d H:i:s P");

// Illustrates the current time for the time the user told my app he is in
$time = new DateTime(null, new DateTimeZone('Europe/London'));
echo $time->format("Y-m-d H:i:s P");

これの出力は次のとおりです。

2012-11-30 11:02:40 +01:00 // My server time
2012-11-30 10:02:40 +00:00 // The users time

ユーザーに現在の時刻を表示できるようになったので、すべて問題ありません。しかし、私が必要としているのは、ユーザー入力を取得してサーバー時間に変換することです-または、少なくともこれが正しい方法だと思います.

ユースケース
ロンドンの User が、 でアクションを実行する必要があることをアプリケーションに伝えます2012-12-01 19:00:00。データベースでこのタイムスタンプを更新することにより、cronjob は指定された時間にこのアクションを実行します。しかし、私のユーザーはこれを2012-12-01 18:00:00代わりに起こっているように経験します。

これを解決する方法を考えている間、私はいくつかのオフセット時間を使って作業していました。これにより、多くのスパゲッティ コードと、データベースの台無しなテーブル デザインが発生しました。

意味をなすようにこれをどのようにやってのけるのですか?

4

1 に答える 1

2

DateTimeオブジェクトのタイムゾーンを必要に応じて変更できます。ユーザーのタイムゾーンから指定された日時があれば、簡単に変換できます。

 $time = new DateTime(null, new DateTimeZone('Europe/London'));
 echo $time->format("Y-m-d H:i:s P");

 $time->setTimezone(new DateTimeZone('America/Chicago'));
 echo $time->format("Y-m-d H:i:s P");
于 2012-11-30T10:32:16.520 に答える