3

私のサイトに有効期限のある投稿があります。これらをMysqlに保存します。

'Y-m-d H:i:s'

すなわち。2012-08-28 00:00:00

この日時を以下の形式に変換し、jqueryカウントダウンに渡します

$offset.', Y, n - 1, j, H, i, s'

この部分は、本来の方法で機能します。

私がやろうとしているのは、現在の時刻を取得し、データベースから有効期限が切れていない投稿のみを取得することです。私をつまずかせているのは、すべての投稿のタイムゾーンが異なることです。それらのほとんどは深夜に期限切れになりますが、異なるタイムゾーンでは、東部の深夜に期限切れになるものもあれば、太平洋の深夜に期限切れになるものもあります。これらはすべて2012-08-2800:00:00として保存され、タイムゾーンはtimezone.nameとしてデータベースに保存されます。アメリカ/東部。カウントダウンの場合、$ offsetはこの値が-4であるために作成されるため、カウントダウンへの入力は次のようになります。

-4, 2012, 8 - 1, 28, 00, 00, 00 

これは私が使用しているjqueryカウンターで機能しますが、現在の日付をmysqlの日付エントリと比較しようとすると機能しません。mysql datetimeエントリを取得する前にタイムゾーンを設定し、東部用にこのような値を保存しようとしました

2012-08-27 20:00:00 

現在の時刻を設定しようとして、アメリカ/フェニックスのタイムゾーンを使用すると、東部のポストの有効期限が切れる午後9時の値が得られます。

2012-08-28 21:00:00 

これは、投稿が1時間早く期限切れになることを意味します。これは私が立ち往生していたことです私はカウントダウンのために複数のデータベースエントリにデータを保存することにオープンであり、有効期限データベースチェックのために1つ私は必要なものを達成するための最良の方法が何であるかわかりません。どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

1

私は個人的にすべての有効期限をUTC(または他の定義されたタイムゾーン-おそらくDBサーバーとアプリケーションサーバーのタイムゾーンが同じ場合)に変換してからデータベーステーブルに入力し、タイムゾーンに基づいてそのテーブルに対してクエリを実行します特定のユーザー。たとえば、WHERE 句は次のようになります。

WHERE expiration_datetime > NOW() + INTERVAL X HOUR

ここで、X は、ユーザーのタイムゾーンの時差を適用する場所です。

于 2012-08-28T16:31:19.630 に答える
0

投稿のタイムスタンプが正規化されないようにすると、データベースの設計が間違っています。すべてのタイムスタンプが同じタイムゾーンにある限り、ユーザーがどのタイムゾーンにいるかは関係ありません。大したことではありません。あなたの質問への答えは - あなたのデザインを修正し、すべてのタイムスタンプを同じタイムゾーン (簡単にするために GMT) に保ちます。

于 2012-08-28T16:28:27.437 に答える