Javascript 向本机日期分析器添加格式

Javascript 向本机日期分析器添加格式,javascript,datetime,prototype,prototypal-inheritance,Javascript,Datetime,Prototype,Prototypal Inheritance,我想知道是否有任何方法可以在javascript中向本机日期解析器添加(和映射)格式(而不使用库) 与Mootools扩展日期对象附带的defineParsers方法类似,如果您熟悉它,但没有Mootools 我能想到的最简单的解决方案是简单地将日期原型解析方法替换为包装原始数据并首先将输入日期重新排列为有效格式的方法,如下所示: Date.prototype.parse = (function(oldVersion) { function extendedParse(dateStrin

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

与Mootools扩展日期对象附带的
defineParsers
方法类似,如果您熟悉它,但没有Mootools

我能想到的最简单的解决方案是简单地将日期原型解析方法替换为包装原始数据并首先将输入日期重新排列为有效格式的方法,如下所示:

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

但是有更简单的方法吗?javascript是否使用任何可访问的数据结构来存储与日期格式及其相应映射相关的信息?

我认为您的方法可能是最好的。实际上,您只想向本机方法添加功能。尽管如此,这不会触及原型,因为解析方法是静态的

下面是一个快速示例:

(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"));
(函数(){
​var nativeParse=Date.parse;
var解析器=[];
​Date.parse=函数(datestring){

对于(var i=0;i我认为您的方法可能是最好的。您基本上只是想向本机方法添加功能。尽管如此,这不会影响原型,因为解析方法是静态的

下面是一个快速示例:

(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"));
(函数(){
​var nativeParse=Date.parse;
var解析器=[];
​Date.parse=函数(datestring){
对于(var i=0;i