それは間違いなく更新されるべきですが、これは企業環境であり、すべてがそれほど単純ではありません。
何が起こっているのかを見るのは役に立ちましたが、奇妙なことがわかりました。 最も単純なものから始めた
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月は火曜日に開始されたかのように正しく表示されません。