MySQLテーブルにデータをロードするWebサイトがあります。テーブルの2つのエントリは、「startdate」と「enddate」です。'startdate'は、CURRENT_TIMESTAMPを使用して自動的に実行されます。'enddate'は、ユーザーが日付ピッカーを使用して選択します。
これにより、ユーザーがサーバーとは異なるタイムゾーンにいる場合に問題が発生します。たとえば(私は太平洋時間帯にいて、サーバーは中央にあります)。午後5時にエントリを作成し、午後10時の終了日を選択すると、データベースには午後7時と午後10時として入力され、5時間ではなく3時間のウィンドウが作成されます。必要なのは終了日を中央時間に変換することです(同じサーバーとして)。したがって、私の例を使用すると、データベースのエントリを午後7時と深夜12時にする必要があります。
このJavaScriptを使用して、ユーザーのタイムゾーンオフセットを取得できます。
var d = new Date();
var timezone = -d.getTimezoneOffset()/60;
これは-7を返します(私はGMT-8にいます、1時間のdifは夏時間のためだと思います)。解決策についての私の最初の考えは、サーバーが-5にあると想定し、2つを比較することです(私の例に戻ると、-5 --- -7 = 2なので、「終了日」に2を追加します)。
問題は、標準時間に戻すときに発生します。私のjavascriptは-7ではなく-8を返し始め、関数を壊してしまうと思います。PHPのdate_default_timezone_get()について知っていますが、数値ではなく文字列を返します。私が必要としているのは、(中部標準時の場合)夏時間中に-5を返し、標準時間中に-6を返す同様の関数だと思います。