我使用以下脚本对表进行排序和过滤:
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:
如果您的解决方案适用于截止日期栏目,请告知我们。
答案 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();
}
}
}
];
这是一个更新的小提琴,有工作日期排序:
答案 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();
}
}