2016-11-19 7 views
0

私はタイムスタンプとdatetimeの間の決定に苦労しています。私は同様の質問をしましたが、誰も私に明確な答えを与えませんでした。次のようにPHP + MySQLのUTCタイムスタンプとdatetimeの保存

シナリオは次のとおりです。

  1. ユーザーは自分のカレンダーにイベントを作成します(自分のタイムゾーンを使用して)
  2. イベントは
  3. 別(一部の「ニュートラル」タイムゾーンで)日時とpersisedされますユーザーはこのイベントを(そのタイムゾーンを使用して)見ることができます

私はDSTとすべての日付&時間関連するものを考慮する必要があります。私は、日付はUTCのタイムゾーンが中立であるべきだと考えています。

私の質問は、誰かがこの状況で利用したワークフローを私に提供できるかどうかです。

私はPHPで私は明らかに日時を使用するだろうと考えてました。

  1. ユーザーは=>私は彼のタイムゾーンでのDateTimeを取るイベント作成 - >タイムスタンプ(getTimestamp)に変換し、そのように存続を
  2. 一部のユーザーは、=>私は、データベースからのタイムスタンプを取得し、そのイベントを見たい場合は - >彼のタイムゾーンを持つ新しいDateTimeオブジェクトを作成 - >タイムスタンプ(setTimestamp)を設定し、この方法は、その時は彼のタイムゾーンで表示されている

私のworkflの欠点はありますか?ああ?

私はSymfony 2を使用しますので、Symfony 2ワークフローが最適ですが、それ以外は何もしません!

答えて

1

ワークフローは問題ありません。

マルチタイムゾーンの要件を満たす必要がある場合は、データベースに時刻をutcタイムスタンプまたはunix epochとして保存する方がよいでしょう。 unix epochはうまくサポートされており、私はこれを示唆しています。クライアント側からでも、タイムゾーンを気にせずにサーバーにUNIXのエポックを送信できます。 utcタイムスタンプを使用する場合は、タイムゾーン間で変換する必要があります。 Unixエポックではまだ変換されていますが、ほとんどの日付オブジェクト構造では非常に単純であり、よくサポートされています。

時間を取得して表示する必要がある場合は、unixエポックとそのユーザーのタイムゾーンを使用して日付オブジェクトを作成します。

+0

Symfony2に精通しているかどうかわかりませんが、この記事[https://matt.drollette.com/2012/07/user-specific-timezones-with-symfony2-and- twig-extensions /)では少し古くなっていますが、開発には非常に使いやすいようです。 datetime(UTC DateTimeから)を日付として格納し、ユーザーのタイムゾーンに表示する必要があると変換した場合の欠点はありますか? – user1970395

+0

全くありません。それをutc datetimeに格納することができます。 –

+0

私はこのアプローチを使用します。私は、データを表示するときに、自分が変換を行う必要がある点(Symfonyは入力=> UTC変換)を自分で処理するので、全体のワークフローを簡素化する必要があります。どうもありがとう。 – user1970395

関連する問題