12

現在、JavaScriptでISO8601の日付(例:2010-02-23T23:04:48Z )をどのように解析していますか?

以下のコードを使用すると、一部のブラウザはNaN(Chromeを含む)を返しますが、FF3.6+は機能します。

<html>
<body>
  <script type="text/javascript">
  var d = Date.parse("2010-02-23T23:04:48Z");
  document.write(d);
</script>
</body>
</html>

ここでこれを試すことができますhttp://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_parse

4

4 に答える 4

9

これは、エッジケースをカバーし、ネイティブ実装にフォールバックする優れた実装です。https://github.com/csnover/js-iso8601/

于 2011-07-20T12:13:21.713 に答える
4

これを試してください:http://anentropic.wordpress.com/2009/06/25/javascript-iso8601-parser-and-pretty-dates/

于 2010-03-19T18:54:19.913 に答える
3

他の人が言っているように、それは第3版の仕様にはありません。ただし、これは第5版の仕様であり、次のように引用します。

ECMAScriptは、ISO 8601拡張形式の簡略化に基づいて、日時の文字列交換形式を定義します。形式は次のとおりです。YYYY-MM-DDTHH:mm:ss.sssZ

そのため、まもなくブラウザに浸透するはずです(IE9、Chrome 1、Firefox 4は、ISO 8601の日付をサポートするブラウザの少なくとも一部です)。その間にソリューションを実装する場合は、スクリプトが可能な場合はネイティブを利用できるように最適化することをお勧めします。

(function ()
{
    if (isNaN(Date.parse("2010-02-23T23:04:48Z")))
    {
        var oldParse = Date.parse;
        Date.parse = function (strTime)
        {
           // regex test strTime for ISO 8601, use oldParse if it isn't
           // Use custom parser if it is.
        }
    }
})();
于 2010-03-20T00:34:01.363 に答える
2

タイトルの質問について:ネイティブではありません(テストしたように:))

ECMA-262(3 / e)では、Date.parse[15.9.4.2]の唯一の要件は、Dateオブジェクトを介したラウンドトリップ変換で.toString()あり、.toUTCString()変更されません。

 Date.parse(x.toString()) == Date.parse(x.toUTCString()) == x

また、.toString()[15.9.5.2].toUTCString()[15.9.5.42]はどちらも実装に依存しているため、どの形式Date.parseを解析できるかは完全に指定されていません。

于 2010-03-19T18:58:05.137 に答える