1

私は一日中これに頭をぶつけてきました。Javascript Dateをどのように初期化しても、有効なDateオブジェクトを取得できないようです...値が「__proto__:Invalid Date」であるChromeのデバッガーで検査することにより、Dateが無効であり、正しく機能していないと想定しています。

私は次のすべてを試しました:

var d = new Date();
var d = new Date('2012-10-08');
var d = new Date('2012-10-08 00:00:00');
var d = new Date(Date('2012-10-08'));
var d = new Date(Date.parse('2012-10-08'));
var d = new Date(2012,10,08);
var d = new Date("October 13, 1975 11:13:00");

数え切れないほどの他の試みとともに。

これは、これらのDateオブジェクトから値を取得しようとしているiOSで問題を引き起こしていますが、すべての関数はNaNを返すだけです。モバイル用の最小限のコードでHTML5入力type="date"でこれを機能させようとしているので、外部ライブラリを使用したり、YYYY-MM-DD形式を他の形式に変換したりする必要はありません。サイト。

基本的に、これは次のように要約されます。Dateオブジェクトを有効にするパラメータは何ですか。

4

4 に答える 4

4

Date オブジェクトを信頼して文字列を解析しないでください。手動で行う必要があります。フォーマットを考えると2012-10-08

function stringToDate(s) {
    s = s.match(/\d+/g);
    if (s) {
        return new Date(s[0], --s[1], s[2]);
    } 
}

入力文字列と結果の日付オブジェクトの検証を行いたい場合があります。上記は変換を示しているだけです。

編集

ところで、すべてのブラウザーで一貫して解析されると思われる唯一の文字列形式は、米国固有のmonth/date/year形式です。その使用をサポートする仕様はありません。また、プラグマティズムと「レガシー」の理由以外に、ブラウザがサポートし続けると信じる理由もありません。

大部分の地域では、'2/3/2012' は 3 月 2 日と解釈されるため、2 月 3 日を取得するのは予想外かもしれません。

古いバージョンの IE が使用されなくなったら (おそらくまだ数年)、ECMA-262 に従って ISO8601 拡張フォーマットを安全に使用できるはずです。ただし、それをサポートするブラウザーでさえ一貫性がありません。例えば与えられた:

new Date('2011-02-29');

Firefox 15 は「無効な日付」を返し、IE 9 と Chrome 22 は 2011 年 3 月 1 日の日付オブジェクトを返します。

于 2012-10-09T22:59:02.347 に答える
1

If your main concern is about parsing, have a look at Moment.js which is clearly superior to parsing things yourself. (IMHO)

于 2012-10-09T23:19:24.577 に答える
1

メソッドを呼び出すには、次の 3 つの方法があります。

  • エポックからのミリ秒数:

     new Date(milliseconds)
    
  • IETF準拠の RFC 2822 タイムスタンプ:

     new Date("November 2, 1988 10:00:00");
    
  • 個々の引数:

     new Date(year, month, day [, hour, minute, second, millisecond])
     new Date(1988,11,02,10,0,0);  
    
于 2012-10-09T22:58:12.680 に答える