Javascript日期转换,排序和显示

时间:2011-04-07 19:59:55

标签: javascript date-format

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

数据采用此格式
yyyy-mm-dd hh:mm:ss事件标题在这里

Feed示例:
2011-04-19 00:00:00 event1标题在这里
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标题在这里
2011-12-13 00:00:00 event5 title here

需要转换日期格式,按日期显示,省略当前日期之前的事件(当前日期为04-21-2011):

所需清单的示例:
04-22-2011 event2 title here 05-25-2011 event3 title here 12-13-2011 event5 title here

提前致谢

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在这里制作一些插头,但它们可能有所帮助:

日期解析和操作可以由我的DateExtensions组件处理。我的ObCollectionOrdered组件可以轻松管理日期列表(排序)。

有两个例子都应该有所帮助。

根据具体情况,这些可能会使用大锤来杀死苍蝇,但它们会为您提供几乎所有复杂性,而不是问题。

答案 2 :(得分:0)

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

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

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

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

  4. 当然,您可以将库用于各种任务,例如日期处理,但使用纯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>
    

答案 3 :(得分: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格式,另一种解决方案是直接对整个字符串进行字面排序(可能因为在这种情况下,时间顺序与字母顺序相同),但是这是另一个故事,我不习惯。

答案 4 :(得分: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)