2012-05-17 3 views
6

Можно создать дубликат:
Javascript date sorting by convert the string in to date formatдата JQuery сортировки

Я не очень хорошо в JQuery поэтому мне было интересно, если есть способ или плагин, который я могу использовать для сортировки даты дивы. У меня есть дата в ГГГГ: MM: DD HH: MM: формат SS. Я показываю дату в divs, как показано ниже. Divs находятся в неупорядоченном формате, и я хочу их отсортировать в первую дату.

<div id="dateDiv">2012-04-15 10:25:45</div> 
<div id="dateDiv">2012-04-10 19:41:08</div> 
<div id="dateDiv">2012-04-20 07:00:10</div> 
<div id="dateDiv">2012-04-12 16:45:50</div> 

Благодаря

+0

Взгляните на этот вопрос -> http://stackoverflow.com/questions/2769301/how-can- i-set-the-mindate-maxdate-for-jqueryui-datepicker-using-a-string Выглядит наподобие вашего. – B4NZ41

+5

В качестве побочного примечания, используя дубликат 'id' s is a large no-no. –

+0

@RichardNeilIlagan: Извините мою ошибку. Я не использовал дублирующий идентификатор в фактическом коде. Я просто сделал копию патча такого же погружения здесь, в качестве примера для удобства. –

ответ

14

Я много о плагинов не знаю ... хотя, если вы хотите легкий способ веса без плагинов, вы можете попробовать это:

HTML:

<div id="D"> 
    <div class="dateDiv">2012-04-15 10:25:45</div> 
    <div class="dateDiv">2012-04-10 19:41:08</div> 
    <div class="dateDiv">2012-04-20 07:00:10</div> 
    <div class="dateDiv">2012-04-12 16:45:50</div> 
</div> 

Для ЯШ:

var elems = $.makeArray($(".dateDiv")); 
elems.sort(function(a, b) { 
    return new Date($(a).text()) < new Date($(b).text()); 
}); 
$("#D").html(elems); 

UPDATE:
Благодаря CMS для ответа на этот вопрос о разборе даты: Why does Date.parse give incorrect results?

function parseDate(input) { 
    var parts = input.match(/(\d+)/g); 
    // new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]]) 
    return new Date(parts[0], parts[1]-1, parts[2], parts[3], parts[4], parts[5]); //  months are 0-based 
} 

var elems = $.makeArray($(".dateDiv")); 
elems.sort(function(a, b) { 
    console.log(parseDate($(a).text())); 
    return parseDate($(a).text()) < parseDate($(b).text()); 
}); 
$("#D").html(elems);​ 

Теперь, не говори мне, что это не работает ... хех

+0

Это не сработает - это не допустимая строка для конструктора Date. – strah

+0

Я не знаю почему ... но это работает: http://jsfiddle.net/jCkCP/ –

+0

Это не работает для меня: http://jsfiddle.net/WpTb5/1/ Возможно, это браузер/ОС зависит? – strah

8

Вы можете использовать date.js библиотеку в сочетании с this функцией сортировщика, чтобы сделать это:

$('#dateDiv').sortElements(function(a, b){ 
    return Date.parse($(a).text()) > Date.parse($(b).text()) ? 1 : -1; 
}); 

оригинальный репо не был сохранен, но обновленная вилка этого, как представляется, в стадии разработки here.

+0

Это хорошо сработало для меня, но я обнаружил, что Date.js гораздо медленнее разбирает даты, чем используя функцию parseDate, описанную выше Parth Thakkar. Надежда помогает кому-то. –

+0

Эта библиотека была обновлена ​​9 лет назад. –

+0

@ NinoŠkopac см. Https://github.com/datejs/Datejs – PinnyM

Смежные вопросы