新しいタイムゾーン-新しい問題

短い休暇から戻って、管理者が新しいタイムゾーンRTZ 2を設定したことを発見しました。その結果、一部のブラウザーは日付に関して多少奇妙に動作し始めました。 たとえば、2013年12月のjquery uiカレンダー(かなり古いバージョン)の例を次に示します。







それは間違いなく更新されるべきですが、これは企業環境であり、すべてがそれほど単純ではありません。

何が起こっているのかを見るのは役に立ちましたが、奇妙なことがわかりました。 最も単純なものから始めた



var date = new Date(2014,0,1)
      
      





IE8では、これは1月1日ではなく、2013年12月31日です。 (古いバージョンを確認してください)。

しかし、誰もがIEの独特な動作に長い間慣れており、上記のスクリーンショットはクロムで撮影されたもので、結果は同じです。

さて、カレンダーをどうするか? ソースを探し回る場合、指定された画像の理由は、1か月の日数の誤った決定です。 12月のクロムとIEのコードは1を返します!

 return 32 - new Date(year, month, 32).getDate();
      
      





これまでのところ、私はこれでこれを置き換えたようです、それは動作するようです。

 return new Date(year, month+1, 0).getDate();
      
      





セッターも正しく動作しません。 たとえば、クロムとIEの両方で、指定されたコードは驚くべき結果をもたらします。

 var date = new Date(2014,0,2); date.setDate(1);
      
      





オペラとFirefoxでまだ問題を発見していません。 また、jquery uiの最新バージョンでは、2013年12月が正常に表示されます。 ただし、2014年1月1日にスクリプトの可用性を確認する必要があります。



この問題にどのように対処しますか?



UPD

修正されたブラウザバージョンが公開されるまで、jquery uiでカレンダーを直接修正できます。

-古いバージョンが使用されている場合、月の日数を決定するための関数を変更する必要があります。

  /* Find the number of days in a given month. */ _getDaysInMonth: function(year, month) { return new Date(year, month+1, 0).getDate(); },
      
      





さらに、月の最初の日の曜日を計算する関数を変更して、日付に少なくとも1時間を追加する必要があります(4番目の引数)。

  /* Find the day of the week of the first of a month. */ _getFirstDayOfMonth: function(year, month) { return new Date(year, month, 1, 1).getDay(); },
      
      





この修正がないと、2014年1月は火曜日に開始されたかのように正しく表示されません。



All Articles