jquery asp.net-mvc tablesorter

Problema con las fechas de clasificación con jquery tablesorter



asp.net-mvc (7)

Estoy usando el complemento tablesorter para ordenar mis tablas en una aplicación MVC .NET. La mayoría de mis columnas son cadenas y no tengo problemas con ellas. Ni con los numéricos. La cosa es que mis columnas de fecha y hora también se están ordenando como si fueran cadenas. Se ordenan así: 01/04/2009, 02/02/2009, 08/08/2009, etc. Obtengo los datos del modelo en esa vista.

Mi llamada es la predeterminada:

$("#table").tablesorter();

Intenté especificar el formato de fecha sin suerte:

$("#table").tablesorter({ dateFormat: ''dd/mm/yyyy''});

Lo extraño sucede cuando escribo manualmente una tabla estática con fechas aleatorias. ¡Se arregla! Pero mis datos provienen de una llamada de base de datos y se colocan en el Modelo, luego los recreo y escribo tr''s con los datos.

Gracias por adelantado.

EDITAR: ¿Podría ser algo relacionado con la forma en que creo los tr''s?

<% foreach (var item in Model) { %> <tr> <td> <%= Html.Encode(item.date) %> </td> <td>...</td> <td>...</td> <td>...</td> </tr> <% } %>


Existe una actualización para jquery tablesorter plugin.

Según la configuración regional de su aplicación, puede ordenar las fechas por esta actualización.

Puede ver la actualización del tablesorter siguiendo el enlace de abajo.

http://tablesorter.openwerk.de/


Intente agregar un analizador Tablesorter a su columna de fecha. Tablesorter viene con un analizador para shortDate, usLongDate e isoDate.

$("#table").tablesorter({ headers: { colNum: { sorter: ''shortDate''} } });

donde colNum es la columna con las fechas. El único ejemplo que pude encontrar en el sitio de tablesorter está here . Esto también funciona si tablesorter también clasifica los números incorrectamente. Hay otros analizadores también para el porcentaje, la dirección IP y más. Eche un vistazo cerca del final del código fuente y aparecerán allí.

Edición: al mirar el código fuente, la opción dateFormat parece buscar solo "us", "uk", "dd / mm / yy" o "dd-mm-yy". ¿Qué pasa cuando intentas "uk"?


Manera más fácil de usar:

dateFormat:''mm/dd/yyyy hh:mm:ss''


Para ser honesto, la solución más simple para mí fue, como dijo compsmart, agregar un texto oculto delante de la fecha real.

  • dateFormat: ''uk'' no me funcionaba, tal vez porque mi formato de fecha es nuevamente diferente
  • http://tablesorter.openwerk.de/ implica modificar el CSS, primero no entiendo por qué y segundo, el esfuerzo es más grande que el simple hecho de agregar texto oculto antes de la fecha.

¡Me gusta la solución KISS de compsmart!


También puede agregar una etiqueta de intervalo oculta antes de su fecha en formato numérico (aaaammdd). Este texto será lo primero y se usará para ordenar, pero se ocultará a la vista y solo mostrará el formato que desee.

<td><span style="display:none">20130923</span>23 September 2013</td>


Tengo el mismo problema y agregué un analizador personalizado llamado datetime:

$.tablesorter.addParser({ id: "datetime", is: function(s) { return false; }, format: function(s,table) { s = s.replace(//-/g,"/"); s = s.replace(/(/d{1,2})[///-](/d{1,2})[///-](/d{4})/, "$3/$2/$1"); return $.tablesorter.formatFloat(new Date(s).getTime()); }, type: "numeric" });

Luego, solo debe aplicar ese formato a las columnas que desee, como expuso Gabe G (por ejemplo, para asignar este clasificador a la primera columna, debe hacer lo siguiente:

$("#mytable").tablesorter( { dateFormat: ''dd/mm/yyyy'', headers: { 0:{sorter:''datetime''} } } );


http://mottie.github.io/tablesorter/docs/

Establecer el formato de fecha. Aquí están las opciones disponibles. (Modificado v2.0.23).

  • "mmddyyyy" (predeterminado)
  • "ddmmyyyy"
  • "aaaammdd"

En versiones anteriores, esta opción se configuró como "us", "uk" o "dd / mm / yy". Esta opción fue modificada para adaptarse mejor a los formatos de fecha necesarios. ¡Solo funcionará con años de cuatro dígitos!

El ordenador debe configurarse en "fecha corta" y el formato de fecha se puede configurar en la opción "dateFormat" o configurar una columna específica dentro de la opción "encabezados". Vea la página de demostración para verlo funcionar.

$(function(){ $("table").tablesorter({ dateFormat : "mmddyyyy", // default date format // or to change the format for specific columns, // add the dateFormat to the headers option: headers: { 0: { sorter: "shortDate" }, // "shortDate" with the default dateFormat above 1: { sorter: "shortDate", dateFormat: "ddmmyyyy" }, // day first format 2: { sorter: "shortDate", dateFormat: "yyyymmdd" } // year first format } }); });

Las columnas individuales se pueden modificar agregando lo siguiente (todas hacen lo mismo), establecidas en orden de prioridad (Modificado v2.3.1):

  • jQuery data data-dateFormat = "mmddyyyy".
  • clase de metadatos = "{dateFormat: ''mmddyyyy''}". Esto requiere el complemento de metadatos.
  • opción de encabezados encabezados: {0: {dateFormat: ''mmddyyyy''}}.
  • nombre de clase de encabezado class = "dateFormat-mmddyyyy". Opción global de dateFormat.

En mi caso he utilizado.

$("#myTable").tablesorter({dateFormat: "uk"})

para la versión.