2011-04-07 57 views
0

我有一串数据,需要使用javascript转换,排序和显示在前端。Javascript日期转换,排序和显示

数据以这种格式
YYYY-MM-DD HH:MM:SS这里事件标题饲料的

实施例:
2011-04-19 00:00:00事件1标题这里
2011-04-22 00:00:00事件2标题这里
2011-05-25 00:00:00 EVENT3标题这里
2011-04-13 00:00:00 EVENT4标题这里
2011- 12-13 00:00:00 event5 title here

需要它来转换日期格式,显示按日期排序之前,当前日期省略事件(当前日期是2011年4月21日):所希望的列表的

实施例:
04-22- 2011 EVENT2标题这里
2011年5月25日EVENT3标题这里
二〇一一年十二月一十三日event5这里

在此先感谢

标题
+0

什么是你的问题?你有没有尝试过一些不起作用的东西,或者你在寻求一般方法的建议? – maerics 2011-04-08 05:34:41

回答

0

这是你要让我们做的功课:P,给我一些时间我会帮你把事情搞定。

var dateRE = /^(\d{2})[\/\- ](\d{2})[\/\- ](\d{4})/; 
function dmyOrdA(a, b){ 
a = a.replace(dateRE,"$3$2$1"); 
b = b.replace(dateRE,"$3$2$1"); 
if (a>b) return 1; 
if (a <b) return -1; 
return 0; } 
function dmyOrdD(a, b){ 
a = a.replace(dateRE,"$3$2$1"); 
b = b.replace(dateRE,"$3$2$1"); 
if (a>b) return -1; 
if (a <b) return 1; 
return 0; } 
function mdyOrdA(a, b){ 
a = a.replace(dateRE,"$3$1$2"); 
b = b.replace(dateRE,"$3$1$2"); 
if (a>b) return 1; 
if (a <b) return -1; 
return 0; } 
function mdyOrdD(a, b){ 
a = a.replace(dateRE,"$3$1$2"); 
b = b.replace(dateRE,"$3$1$2"); 
if (a>b) return -1; 
if (a <b) return 1; 
return 0; } 

dateArray = new Array('15/10/2000','28/05/1999', 
'17/09/2005','06/12/2004','02/01/1998'); 
dateArray.sort(dmyOrdA); 
document.write('Ascending : ' + dateArray + '<br />'); 

现在,这只是一种排序日期的方法,使用这种逻辑来适应您的需要。 有几件事情你可以做,可能为你的事件建立对象,使它们与排序时的日期保持一致。

Date sort from about.com

+0

感谢您的信息,我会试一试。我在设计方面,只有足够的编码和JavaScript知识惹麻烦。 – user697493 2011-04-08 14:12:09

0

使一些塞在这里,但他们可能会有所帮助:

日期的解析和操作可以通过我的DateExtensions组件来处理。我的ObCollectionOrdered组件很容易处理日期列表(分类)的管理。

有两个应该帮助的例子。

根据具体情况,这些可能会使用大锤来杀死苍蝇,但它们会将几乎所有的复杂性从问题中抽象出来。

0

这听起来像你需要实现执行这些任务的功能:

  1. 解析输入:该字符串必须被解析成的对象以“日期”和“标题”属性的列表。尝试将“YYYY-MM-DD”日期格式与正则表达式匹配,并使用其构造函数构建Date对象。

  2. 过滤数据:如果对象比当前时间早并且按递增顺序(从最旧到最新)按日期排序,则应拒绝这些对象。日期可以比较,列表可以在JavaScript中本地排序。

  3. 格式化输出:应将对象作为具有所需日期格式的字符串列表返回。尝试通过从其月份,日期和年份获得者构建字符串来输出日期。

当然,您可以使用库来处理日期处理等各种任务,但使用纯JavaScript应该足够简单。例如:

<script language="javascript"> 
    var parseFeed = function(str, now) { 
    var regex=/^(\d{4})-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d) (.*)$/ 
     , input=str.split(/\n/).sort(), len=input.length 
     , output=[], now=now||new Date(), d, m; 
    for (i=0; i<len; i++) { 
     if (m = input[i].match(regex)) { 
     d = new Date(m[1], m[2]-1, m[3], m[4], m[5], m[6]); 
     if (d >= now) { 
      output.push([m[2], m[3], m[1]].join('-') + ' ' + m[7]); 
     } 
     } 
    } 
    return output; // An array of sorted, yet-to-come, formatted events. 
    }; 
    var input = "" 
    + "2011-02-19 00:00:00 event0 title here\n" 
    + "2011-04-19 00:00:00 event1 title here\n" 
    + "2011-04-22 00:00:00 event2 title here\n" 
    + "2011-05-25 00:00:00 event3 title here\n" 
    + "2011-04-13 00:00:00 event4 title here\n" 
    + "2011-12-13 00:00:00 event5 title here\n"; 
    var april12 = new Date(2011, 3, 21) 
    , output = parseFeed(input, april21); 
</script> 
0

只要告诉你的编码器停止播放3D射击游戏,做他们的工作^^

玩笑归玩笑:

<script type="text/javascript"> 

var a, d, i, f, m, o, r, t, y; 

a = [ 
    "2011-04-19 00:00:00 event1 title here", 
    "2011-04-22 00:00:00 event2 title here", 
    "2011-05-25 00:00:00 event3 title here", 
    "2011-04-13 00:00:00 event4 title here", 
    "2011-12-13 00:00:00 event5 title here" 
]; 

r = []; 
t = []; 
for (i = 0; i < a.length; i++) { 
    y = a[i].substr(0, 4); 
    m = a[i].substr(5, 2); 
    d = a[i].substr(8, 2); 
    t[i] = Date.UTC(
     parseInt(y), 
     parseInt(m - 1, 10), 
     parseInt(d, 10), 
     parseInt(a[i].substr(11, 2), 10), 
     parseInt(a[i].substr(14, 2), 10), 
     parseInt(a[i].substr(17, 2), 10) 
    )/1000; 
    r[i] = [t[i], a[i], m + "-" + d + "-" + y + a[i].substr(19)]; 
} 

r.sort(
    function(a, b) { 
     return a[0] - b[0]; 
    } 
); 

f = Date.UTC(2011, 4 - 1, 21, 0, 0, 0)/1000; 
for (i in r) { 
    if (r[i][0] >= f) 
     document.write(r[i][2] + "<br />"); 
} 
</script> 

随着你输入的字符串的日期部分似乎遵循ISO8601格式,另一种解决方案是直接从字面上排序整个字符串(因为在这种情况下按时间顺序将与字母顺序相同),但这是另一个故事,我不习惯它。

0
sorting dates ascending or descending 
times = ["01-09-2013", "01-09-2013", "27-08-2013", "27-08-2013", "28-08-2013", "28-08-2013", "28-08-2013", "28-08-2013", "29-08-2013", "29-08-2013", "30-08-2013", "30-08-2013", "31-08-2013", "31-08-2013"] 
function dmyOrdA(a,b){ return myDate(a) - myDate(b);} 
function dmyOrdD(a,b){ return myDate(b) - myDate(a);} 
function myDate(s){var a=s.split(/-|\//); return new Date(a[2],a[1]-1,a[0]);} 

times.sort(dmyOrdA); 
console.log(times)