2012-05-17 13 views
6

Duplicar posible:
Javascript date sorting by convert the string in to date formatfecha de jQuery clasificación

no soy bueno en jQuery así que me preguntaba si hay una manera u plugin que puedo utilizar para ordenar divs fecha. Tengo una fecha en formato YYYY: MM: DD HH: MM: SS. Estoy mostrando la fecha en divs como se muestra a continuación. Las Divs están en formato desordenado y quiero ordenarlas en la fecha más reciente primero.

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

Gracias

+0

Tome esta pregunta un vistazo -> http://stackoverflow.com/questions/2769301/how-can- i-set-the-mindate-maxdate-for-jqueryui-datepicker-using-a-string Se parece al tuyo. – B4NZ41

+5

Como nota al margen, usar 'id's duplicados es un gran no-no. –

+0

@RichardNeilIlagan: Lo siento, mi error. No he usado el ID duplicado en el código real. Solo copié el mismo buceo aquí en el ejemplo por conveniencia. –

Respuesta

14

No sé mucho acerca de los plugins ... aunque si quieres un método de peso ligero y sin complementos, es posible que intente esto:

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> 

Para JS:

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

ACTUALIZACIÓN:
Gracias a la CMS para responder a esta pregunta acerca de las fechas de análisis sintáctico: 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);​ 

Ahora, no me diga que esto no funciona ... jeje

+0

Esto no funcionará - no es una cadena válida para el constructor de fecha. – strah

+0

No sé por qué ... pero esto funciona: http://jsfiddle.net/jCkCP/ –

+0

No funciona para mí: http://jsfiddle.net/WpTb5/1/ Tal vez sea su navegador/sistema operativo ¿dependiente? – strah

8

Puede utilizar el date.js biblioteca combinada con this función clasificadora para hacer esto:

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

el repositorio original no se ha mantenido, sino un tenedor actualizada que parece estar en progreso here.

+0

Esto funcionó bien para mí, pero encontré que el Date.js fue mucho más lento al analizar las fechas que utilizando la función parseDate de Parth Thakkar anterior. Espero que ayude a alguien. –

+0

Esa biblioteca fue actualizada por última vez hace 9 años. –

+0

@ NinoŠkopac ver https://github.com/datejs/Datejs – PinnyM

Cuestiones relacionadas