6

シナリオは次のとおりです。PHP のデフォルトのタイムゾーンを UTC に設定しています。私が扱っている日付/時刻は 1 つを除いてすべて現在の UTC 時刻に設定されています。後で表示するときに、その特定のユーザーのタイムゾーンを設定すると、日付がタイムゾーンで表示されます。よく働く。

ただし、ユーザーがフォームに入力できる日付/時刻が 1 つあります。24 時間形式で「YYYY-MM-DD HH:MM」となります (例: 「2014-09-18 17:00」)。ユーザーは当然、UTC ではなくタイムゾーンで時刻を設定します。

入力値を使用して新しい DateTime オブジェクトを作成すると、UTC で保存されるため、後で表示すると数時間ずれます (元のタイムゾーンによって異なります)。新しいオブジェクトにタイムゾーンを設定すると、入力値が UTC であると仮定して値が変更されます。

私はいくつかのグーグルを行いましたが、PHPに関しては何も見つかりませんでした(私が見つけたC#のいくつかの答えが存在します)。これは DateTime オブジェクト (または Carbon) で可能ですか? ユーザーの現在のタイムゾーンに基づいて時間を手動で加算/減算して、最初に UTC に配置することにこだわっていますか?

4

1 に答える 1

12

DateTime既に作成されているときではなく、オブジェクトを作成するときにタイムゾーンを設定する必要があります。次に、DateTime オブジェクトをUTCタイムゾーンに変更し、データベースに保存します。

# create DateTime based on user timezone
$dt = new DateTime('2014-09-18 17:00', new DateTimezone('Australia/Sydney'));
# change time to UTC timezone
$dt->setTimezone(new DateTimezone('UTC'));
于 2014-09-20T05:40:43.947 に答える