将格式添加到本机Date解析器

时间:2012-10-31 16:04:32

标签: javascript datetime prototype prototypal-inheritance

我想知道是否有任何方法可以在javascript中添加(和映射)格式到本机Date解析器(不使用库)。

类似于Mootools扩展Date对象附带的defineParsers方法,如果您熟悉它,但没有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用于存储与日期格式及其适当映射有关的信息?

1 个答案:

答案 0 :(得分:1)

我认为你的方法可能是最好的。您基本上只想添加本机方法的功能。虽然,这不会触及原型,因为解析方法是静态的。

以下是一个快速示例:

(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