Проблема с сортировкой дат с помощью jquery tablesorter

StackOverflow https://stackoverflow.com/questions/1091921

  •  11-09-2019
  •  | 
  •  

Вопрос

Я использую плагин tablesorter для сортировки моих таблиц в приложении MVC .NET.Большинство моих столбцов - это строки, и у меня не возникает с ними никаких проблем.Ни с числовыми единицами.Дело в том, что мои столбцы datetime также сортируются так, как если бы они были строками.Они сортируются следующим образом:01/04/2009, 02/02/2009, 03/08/2009 и т.д.Я получаю данные из Модели в этом Представлении.

Мой вызов используется по умолчанию:

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

Я попытался указать dateformat, но безуспешно:

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

Странная вещь происходит, когда я вручную набираю статическую таблицу со случайными датами.Все будет улажено!Но мои данные поступают из вызова базы данных и помещаются в Модель, затем я обрабатываю ее и записываю tr с данными.

Заранее благодарю.

Редактировать:Может ли это быть как-то связано с тем, как я создаю tr?

<% foreach (var item in Model) { %>
<tr>
<td>
<%= Html.Encode(item.date) %>
</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<% } %>
Это было полезно?

Решение

Попробуйте добавить анализатор Tablesorter в свой столбец date.Tablesorter поставляется с анализатором для shortDate, usLongDate и ISODate.

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

где colNum - столбец с датами.Единственный пример, который я смог найти на сайте tablesorter, - это здесь.Это также работает, если tablesorter также неправильно сортирует числа.Существуют и другие парсеры для определения процента, ip-адреса и многого другого.Взгляните ближе к концу исходного кода, и они будут перечислены там.

Редактировать: При просмотре исходного кода параметр DateFormat, по-видимому, ищет только "us", "uk", "dd / mm / yy" или "dd-mm-yy".Что происходит, когда вы пробуете "uk"?

Другие советы

У меня возникла та же проблема, и я добавил пользовательский анализатор под названием 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"
});

Затем вам просто нужно применить этот формат к нужным столбцам, как указано в Gabe G (например, чтобы назначить этот сортировщик первому столбцу, вам следует выполнить следующее:

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

Вы также можете добавить скрытый тег span перед вашей датой в числовом формате (ггггммдд).Этот текст будет первым и использоваться для сортировки, но он будет скрыт от глаз и отображать только тот формат, который вы хотите.

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

Существует обновление для плагина jquery tablesorter.

В соответствии с локализацией вашего приложения вы можете отсортировать даты по этому обновлению.

Вы можете просмотреть обновление tablesorter, перейдя по ссылке ниже.

http://tablesorter.openwerk.de/

Более простой способ использования:

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

Честно говоря, самым простым решением для меня было, как сказал compsmart, добавление некоторого скрытого текста перед фактической датой.

  • Формат даты:"великобритания" у меня это не сработало, может быть, потому, что мой формат даты снова отличается
  • http://tablesorter.openwerk.de/ включает в себя изменение CSS, во-первых, я не понимаю, почему, а во-вторых, требуется больше усилий, чем простое добавление скрытого текста перед датой.

Мне нравится решение KISS от compsmart!

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

Установите формат даты.Вот доступные варианты.(Модифицированная версия v2.0.23).

  • "mmddyyyyy" (по умолчанию)
  • "ддмммйййй"
  • "ггггммдд"

В предыдущих версиях этот параметр был установлен как "сша", "Великобритания" или "дд/мм/гг".Этот параметр был изменен, чтобы лучше соответствовать необходимым форматам дат.Это будет работать только с четырехзначными годами!

Сортировщик должен быть настроен на "shortDate", а формат даты может быть установлен в опции "DateFormat" или установлен для определенных столбцов в опции "headers".Посмотрите демонстрационную страницу, чтобы увидеть, как это работает.

$(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
    }

  });
}); 

Отдельные столбцы могут быть изменены путем добавления следующего (все они выполняют одно и то же действие), установленного в порядке приоритета (измененная версия v2.3.1):

  • Данные jQuery data-DateFormat="mmddyyyyy".
  • класс метаданных="{ DateFormat:'ммдддыыыы'}".Для этого требуется плагин метаданных.
  • заголовки опции headers :{ 0 :{ Формат даты :'ммдддыыыы' } }.
  • имя класса заголовка class="DateFormat-mmddyyyyy".Общий параметр DateFormat.

В моем случае я использовал

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

для версии.

Это был ответ для меня:

<td data-order=<fmt:formatDate pattern = "yyyy-MM-dd" value = "${myObject.myDate}" />>${myObject.myDate}</td>

более подробная информация здесь: https://datatables.net/manual/data/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top