2013-06-26 25 views
1

我使用下面的脚本用于排序和filteriing表表达
http://javascripttoolbox.com/libsource.php/table/source/table.js经常在欧洲格式排序时间(DD-MM-YYYY)

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

脚本已建成三个正则表达式功能排序日期:

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/

请让我知道,如果你的解决方案适用于该截止日期列!

+0

第二个一定会支持DD-MM-YYYY也一样,如果你在日期构造周围交换匹配。 – lonesomeday

+1

只要给出日期'01-02-2013',就不可能知道它是格式为“DD-MM-YYYY”还是“MM-DD-YYYY”。 –

+0

看看我的jsFiddle在截止日期栏 - 我无法让它正常工作 – Kenci

回答

2

你捣鼓了一个额外的参考table.js,这是执行的,而不是ÿ我们的JavaScript代码。此外,要触发的代码,需要将其插入头标签(“框架&扩展”下的设置)。

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

<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/

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(); 
    } 
} 
+0

您需要相应地构造Date对象,但是我现在看到了。它不工作,但我会做一个jsFiddle – Kenci

+0

只是更新我的答案,显示数据对象更改 – vogomatix

+0

尝试排序我的jsFiddle中的截止日期列,你可以在描述中找到 - 我已经试过实现这个解决方案没有运气。 – Kenci