以欧洲格式排序日期的正则表达式(dd-MM-yyyy)

时间:2013-06-26 15:55:32

标签: javascript regex

我使用以下脚本对表进行排序和过滤:

http://javascripttoolbox.com/lib/table/
源代码:
http://javascripttoolbox.com/libsource.php/table/source/table.js

我的日期格式为:dd-MM-yyyy。

该脚本有三个内置的RegEx函数用于排序日期:

sort.date.formats = [
// YY[YY]-MM-DD
{
    re: /(\d{2,4})-(\d{1,2})-(\d{1,2})/,
    f: function (x) {
        return (new Date(sort.date.fixYear(x[1]), +x[2], +x[3])).getTime();
    }
}
// MM/DD/YY[YY] or MM-DD-YY[YY]
,
{
    re: /(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})/,
    f: function (x) {
        return (new Date(sort.date.fixYear(x[3]), +x[1], +x[2])).getTime();
    }
}
// Any catch-all format that new Date() can handle. This is not reliable except for long formats, for example: 31 Jan 2000 01:23:45 GMT
,
{
    re: /(.*\d{4}.*\d+:\d+\d+.*)/,
    f: function (x) {
        var d = new Date(x[1]);
        if (d) {
            return d.getTime();
        }
    }
}];

所以问题是,dd-MM-yyyy格式的日期正则表达式是怎样的?

我在这里创建了一个jsFiddle:

http://jsfiddle.net/LgQsu/

如果您的解决方案适用于截止日期栏目,请告知我们。

2 个答案:

答案 0 :(得分:2)

你的小提琴还有table.js的额外引用,它正在执行而不是你的javascript代码。此外,要触发代码,需要将其插入head-tag(“Framework& Extensions”下的设置)。

您的截止日期列被指定为“默认”,即字母数字。

<th class="table-sortable:date ..." ...>

修复后,错误的日期格式匹配。日期匹配为“YY-MM-DD”(2位数年份),而不是“DD-MM-YYYY”,即使日期以4位数年份结束。这是因为您的正则表达式未使用^$锚定。

sort.date.formats = [
    // YY[YY]-MM-DD
    {
        re: /^\s*(\d{2,4})-(\d{1,2})-(\d{1,2})\s*$/,
        f: function (x) {
            return (new Date(sort.date.fixYear(x[1]),+x[2],+x[3])).getTime();
        }
    },
    // DD/MM/YY[YY] or DD-MM-YY[YY]
    {
        re: /^\s*(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})\s*$/,
        f: function (x) {
            return (new Date(sort.date.fixYear(x[3]),+x[2],+x[1])).getTime();
        }
    },
    // Any catch-all format that new Date() can handle. This is not reliable except for long formats, for example: 31 Jan 2000 01:23:45 GMT
    {
        re: /(.*\d{4}.*\d+:\d+\d+.*)/,
        f: function (x) {
            var d=new Date(x[1]);
            if (d) {
                return d.getTime();
            }
        }
    }
];

这是一个更新的小提琴,有工作日期排序:

http://jsfiddle.net/fa2Qm/

答案 1 :(得分:0)

正则表达式与第二个正则表达式相同,即

re: /(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})/,

如果你考虑一下dd-mm-yyyy看起来和mm-dd-yyyy一样

创建Date对象的参数顺序会发生变化,请注意索引更改为x数组:

{
    re: /(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})/,
    f: function (x) {
        return (new Date(sort.date.fixYear(x[3]), +x[2], +x[1])).getTime();
    }
}