2012-03-08 14 views
4

デフォルトのビューは週です。fullCalendar夏時間エラー

これはうまくいきましたが、13日(3月26日初め)に進むと、イベントが正しく読み込まれないことに気付きました。私はすぐにこれが3月25日に起こる夏時間の変更と関係があると思った。

次の/ prevボタンをクリックすると、カレンダーは自動的に生成された開始時刻と終了時刻を使用してajax呼び出しを行い、バックグラウンドのPHPスクリプトは開始日をとり、週番号を計算し、myその週のデータベース。例えば

は週に12個のTEH以下の変数が渡されます?

$week_no = date('W', $_GET['start']); 

を= 1332115200 &終了= 1332716400 & _ = 1331237729591

PHPスクリプトを開始12週目になる。

ただし、次の週に渡された変数は、次のとおりです。?だから、明らかに

開始= 1332716400 &終了= 1333321200 & _ = 1331238038820

$week_no = date('W',$_GET['start']); == 12 // same as last week 

Nnをさらに検討

echo date("C",1332115200); // == 2012-03-19T00:00:00+00:00 
echo date("C",1332716400); //2012-03-25T23:00:00+00:00 (1 hour short of being in week 13) 

昼光の変化が原因です。

私の質問は、これはfullcalanderまたはPHPロジックの問題ですか?

+0

あなたのコンピュータのタイムゾーンは何ですか?b)サーバー/ PHPは?違いがある場合、それは間違いを引き起こす可能性があります。必ずしもこれは必須ではありませんが、将来はエラーや問題が発生します。 fullCalendarはクライアントのクロックに依存するため、実際にはそれほど多くのことを行うことはできません。 – Niko

+0

本当に?それは吸う。いつでもどのタイムゾーンでも動作するコードを書くことが可能でなければなりません。私はそれがUNIXのタイムスタンプのポイントであると考えていました。 –

+0

ええ、でもそれは正しいことです。 fullCalendarはUTCタイムスタンプを渡すのではなく、ローカライズされたタイムスタンプを渡します。それはすべてそれをつまむことです。 – Niko

答えて

3

まずことがあります私は、私が言っているすべては、あなたのコードや設定を知りませんかなり推測。

システムが両方ともUTCに設定されている場合は、問題ありません(そうすべきではありません)。これは、UTCに設定されたサーバーで、JavaScript関数date.getUTC *(fullCalendarはこれらを使用しない)を正しく使用する場合にも同じです。しかし、あなたのコンピュータは「ヨーロッパ/ロンドン」またはそれに類するもの(冬のUTC + 0なのでUTCのように見えます)に設定されている間は、あなたのサーバだけが実際にUTCに設定されていると思います。

この結果、次のような状況になります。fullCalendarは、たとえば次のようなタイムスタンプを計算しようとします。 2012年1月7日00:00:00 - コンピュータがその日付にDSTが適用されるタイムゾーン(冬はUTC + 0、夏はUTC + 1 - > 7月1日= UTC + 1)に設定されているため、その瞬間のタイムスタンプを、7月1日00:00:00の時刻に取得します。IN LONDON。彼らの時間はUTCの1時間前ですから、そのタイムスタンプをUTCに基づいて解釈すると、23:00:00になります。つまり、サーバーの動作です。

ソリューションこのような単純なことができます。対応する日付はUTC + 1に冬と相対している場合はその方法

<?php 
date_default_timezone_set('Europe/London'); 

、サーバーはUTC + 0にタイムスタンプを相対的に解釈すべきですもしそれが夏にあれば。

ただし、訪問者のタイムゾーンが異なる値に設定されている場合などです。 "America/Los_Angeles"、あなたのアプリケーションはまだ混乱しており、期待どおりに動作しません。通常、UTCタイムスタンプはどこにでも使用するのが最善の方法ですが、fullCalendarは現在そのタイムスタンプをサポートしていません。

+0

ありがとうございます。ここ数日間はこれを勉強していたので、私は同じ結論に至りました。私は、タイムゾーンや夏時間などを処理するのは非常に不満であると言わなければなりません。私はこの時点で自分のアプリケーションを自分の家で働いていますが、時間と地理の本質は、 –

+0

これは私がこれについて感じている方法の100%です。可能な限り、UTCに固執するのが最良の方法です。 – Niko

+1

実際には、fullCalendar(1.5+)はUTCをサポートしています。日付パラメータの最後に 'Z'を使用します。例えば2012-03-11T12:00:00.0000000ZはUTCとして読み込まれます。 UTCはタイムゾーンとみなされるため、ignoreTimezoneをfalseに設定する必要があります。 http://code.google.com/p/fullcalendar/issues/detail?id=750 –

0

夏時間の日付が異なるタイムゾーンで異なる可能性がありますので、タイムゾーンによって異なる場合があります。 php.iniファイルに設定されているタイムゾーンがあなたの国のタイムゾーンと同じであることを確認してください。

date_default_timezone_setで設定時間帯も可能です。

サポートされているタイムゾーンのリストです。
http://php.net/manual/en/timezones.php