1

(ライブラリを使用せずに)javascriptのネイティブDateパーサーにフォーマットを追加(およびマップ)する方法があるかどうか疑問に思いました。

defineParsers慣れている場合は、Mootools拡張Dateオブジェクトに付属しているメソッドに似ていますが、Mootoolsはありません。

私が考えることができる最も簡単な解決策は、Dateプロトタイプの解析メソッドを、元のメソッドをラップし、最初に入力日付を有効な形式に再配置するメソッドに置き換えることです。

Date.prototype.parse = (function(oldVersion) {
    function extendedParse(dateString) {
        //change dateString to an acceptable format here
        oldVersion(dateString);
    }
    return extendedParse;
})(Date.prototype.parse);

しかし、もっと簡単な方法はありますか?日付形式とその適切なマッピングに関する情報を格納するためにjavascriptが使用するアクセス可能なデータ構造はありますか?

4

1 に答える 1

1

あなたのアプローチがおそらく最善だと思います。基本的には、ネイティブ メソッドに機能を追加したいだけです。ただし、parse メソッドは静的であるため、これはプロトタイプには影響しません。

簡単なサンプルを次に示します。

(function() {

    ​var nativeParse = Date.parse;
    var parsers = [];

    ​Date.parse = function(datestring) {
        for (var i = 0; i<parsers.length; i++) {
            var parser = parsers[i];
            if (parser.re.test(datestring)) {
                datestring = parser.handler.call(this, datestring);
                break;
            }
        }
        return nativeParse.call(this, datestring);
    }

    Date.defineParser = function(pattern, handler) {
        parsers.push({re:pattern, handler:handler});
    }

}());

Date.defineParser(/\d*\+\d*\+\d*/, function(datestring) {
    return datestring.replace(/\+/g, "/");
});

console.log(Date.parse("10+31+2012"));

ここではjsfiddleにあります。

于 2012-10-31T17:15:59.590 に答える