1. ホーム
  2. javascript

[解決済み] DateコンストラクタはIEではNaNを返すが、FirefoxとChromeでは動作する

2023-07-28 11:11:34

質問

私は JavaScript で小さなカレンダーを作ろうとしています。私はFirefoxとChromeで素晴らしい仕事をしている私の日付を持っていますが、IEでは日付関数がNaNを返しています。

ここに関数があります。

function buildWeek(dateText){
    var headerDates='';
    var newDate = new Date(dateText);

    for(var d=0;d<7;d++){
        headerDates += '<th>' + newDate + '</th>';
        newDate.setDate(newDate.getDate()+1);
    }                       

    jQuery('div#headerDates').html('<table><tr>'+headerDates+'</tr></table>');
}

dateText は現在の週の月曜日で、実際には php で 'm, d, Y' の形式で設定されます、例えば "02, 01, 2010" .

どのように解決するのですか?

Dateコンストラクタは任意の値を受け取ります。引数のプリミティブ[[value]]がnumberの場合、生成されるDateはその値を持ちます。プリミティブ[[value]]がStringの場合、DateコンストラクタとparseメソッドがDate.prototype.toStringとDate.prototype.toUTCString()の結果をパースできることだけを保証する仕様になっています。

Dateを設定する信頼できる方法は、Dateを構築して setFullYearsetTime メソッドを使用します。

その例がここに表示されます。 http://jibbering.com/faq/#parseDate

ECMA-262 r3 では、日付の書式は定義されていません。DateコンストラクタやDate.parseに文字列を渡すと、実装に依存した結果になります。避けたほうがよいでしょう。


編集する comp.lang.javascriptのFAQからのエントリは。 拡張ISO 8601ローカル日付フォーマット YYYY-MM-DD をパースすることができます。 Date を次のようにします:-)

/**Parses string formatted as YYYY-MM-DD 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-DD, 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)\s*$/,
        date = new Date(NaN), month,
        parts = isoExp.exec(dateStringInRange);

    if(parts) {
      month = +parts[2];
      date.setFullYear(parts[1], month - 1, parts[3]);
      if(month != date.getMonth() + 1) {
        date.setTime(NaN);
      }
    }
    return date;
  }