私はカレンダーを使用していますが、IEでは eventStartDay = new Date(eventStart.getTime() + (24 * 60 * 60 * 1000*(days))); 動かない。関数 parseISO8601("yyyy-mm-dd") で新しい日付を置き換えていますが、秒だけを使用して日付を取得する方法がわかりません
2 に答える
次の形式がすべてのブラウザーでサポートされていることがわかったので、それらの形式を使用して、どのブラウザーでもクラッシュしないようにしました。
var d = new Date(2011, 01, 07); // yyyy, mm-1, dd
var d = new Date(2011, 01, 07, 11, 05, 00); // yyyy, mm-1, dd, hh, mm, ss
var d = new Date("02/07/2011"); // "mm/dd/yyyy"
var d = new Date("02/07/2011 11:05:00"); // "mm/dd/yyyy hh:mm:ss"
var d = new Date(1297076700000); // milliseconds
var d = new Date("Mon Feb 07 2011 11:05:00 GMT"); // ""Day Mon dd yyyy hh:mm:ss GMT/UTC
あなたはNaN
結果として得ていると言いました。これdays
はNaN
、 であるか、そのeventStart
基になる値が であるということを示していますNaN
。
私の推測では、Date
コンストラクターに文字列を解析するように依頼し、結果を に入れ、eventStart
それが機能するかどうかをチェックしていないということです。でサポートされていると文書化されている唯一の文字列形式は次のnew Date(string)
とおりです。
吐き出されるものは何でも
Date#toString
(定義されていませんが、入力時に受け入れられる必要があります)、ISO-8601 の簡略化された形式 (古いブラウザーでは必ずしもサポートされていません。ES5 の新機能)
...しかし、実際には、最新のすべてのブラウザー (IE を含む) では、形式も使用できます"yyyy/mm/dd"
。
したがって、テストしている IE のバージョンでサポートされていない日付文字列を解析しようとしているのではないかと思います。たとえば、IE8 以前"yyyy-mm-dd"
では、満足しているにもかかわらず、処理できません (IE9 では処理できます) "yyyy/mm/dd"
。
したがって、それがあなたが直面している問題でeventStart
あり、実際にはそもそも無効であり、計算全体が汚染されているのではないかと思います。.replace(/-/g, "/")
それを修正することは、事前に文字列を修正するのと同じくらい簡単かもしれません. フォーマットがより複雑な場合は、 MomentJSyyyy-mm-dd
などのライブラリを検討することをお勧めします。