Подтвердить что ты не робот

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

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

Мой вызов по умолчанию:

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

Я пробовал указать dateformat без везения:

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

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

Спасибо заранее.

EDIT: Может быть, это связано с тем, как я создаю tr?

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

Ответ 1

Попробуйте добавить парсер Tablesorter к столбцу даты. Tablesorter поставляется с парсером для shortDate, usLongDate и isoDate.

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

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

Edit: Рассматривая исходный код, параметр dateFormat выглядит только для "us", "uk", "dd/mm/yy" или "dd-mm-yy". Что происходит, когда вы пытаетесь "uk"?

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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

http://tablesorter.openwerk.de/

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

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

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

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

Сортировщик должен быть установлен на "shortDate", а формат даты можно установить в опции "dateFormat" или установить для определенных столбцов в опции "заголовки". См. Демонстрационную страницу, чтобы увидеть, как она работает.

$(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 = "mmddyyyy".
  • metadata class= "{dateFormat: 'mmddyyyy}. Для этого требуется плагин метаданных.
  • Заголовки заголовков заголовков: {0: {dateFormat: 'mmddyyyy}}.
  • имя класса заголовка class= "dateFormat-mmddyyyy". Общая опция dateFormat.

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

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

для версии.

Ответ 8

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

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

подробнее, здесь: https://datatables.net/manual/data/