Date()コンストラクタは、入力として文字列ではあまりにも信頼性が低いと思います。
@Garrettは、ここでの問題について説明します -
日を設定するための信頼性の高い方法は、1を構築し、 にsetFullYearとのsetTimeメソッドを使用することです。
彼は、リンク、機能、そしてここで詳細を与える:https://stackoverflow.com/a/2182529/644492
私は完全なISOのDateTime UTC文字列の入力を取り、私は後日に操作することができUTCのDateオブジェクトを返す関数を修正ゲッター。
IE8のDateコンストラクタでミリ秒が追加されないため、ミリ秒が短くなりました。
私の変更は、おそらく完全ではない - 正規表現は最後に少し緩んでいると、ブロックをチェックし、そのフォーマットは、おそらく私の新しい入力形式に変更する必要があります...
/**Parses string formatted as YYYY-MM-DDThh:mm:ss.sZ
* or YYYY-MM-DDThh:mm:ssZ (for IE8), to a Date object.
* If the supplied string does not match the format, an
* invalid Date (value NaN) is returned.
* @param {string} dateStringInRange format YYYY-MM-DDThh:mm:ss.sZ,
* or YYYY-MM-DDThh:mm:ssZ - Zulu (UTC) Time Only,
* with year in range of 0000-9999, inclusive.
* @return {Date} Date object representing the string.
*/
function parseISO8601(dateStringInRange) {
var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d).*Z\s*$/,
date = new Date(NaN), month,
parts = isoExp.exec(dateStringInRange);
if (parts) {
month = +parts[2];
date.setUTCFullYear(parts[1], month - 1, parts[3]);
date.setUTCHours(parts[4]);
date.setUTCMinutes(parts[5]);
date.setUTCSeconds(parts[6]);
if(month != date.getUTCMonth() + 1) {
date.setTime(NaN);
}
}
return date;
}
出典
2012-09-07 05:38:14
MLH
ワン補正: '場合(month!= date.getMonth()+ 1) 'は' if(month!= date.getUTCMonth()+ 1) 'でなければなりません。 – Grinn