2016-09-08 2 views
-3

У меня есть столбец в таблице, которая содержит данные, такие как:Как я могу сортировать столбец, содержащий разницу дат, используя данные?

1 year 5 months 12 days 
7 months 
3 year 4 days 

Я хочу, чтобы отсортировать эту колонку. Как я могу это сделать?

+2

пожалуйста, поместите ваш код здесь свистеть года u сделал до сих пор –

+0

У меня просто таблица html, показывающая данные с php. Я должен применить сортировку по столбцу, указанному выше. Единственный js, который я сделал в datatables: $ ('# actionData'). DataTable ({ paging: false, // Disable default pagination search: false, // Отключить поиск по умолчанию stateSave: true, // Save table состояние сортировки для перезагрузки информация: false // Скрыть данные таблицы }); –

+0

Btw, мы не можем предоставить решение без вашего кода, здесь вы не можете прочитать ваш разум за то, что вы сделали. :) –

ответ

3

Проверьте эту статью о Orthrogonal data из руководства DataTables.

Предположим, у вас есть таблица с тремя столбцами, а в третьем столбце хранятся данные, относящиеся к дате, которые вы хотите отсортировать.

Попробуйте предоставляя свои данные в этом формате:

// Array with data objects 
var data = [ 
    { 
     "column1": "column1_data", 
     "column2": "column2_data", 
     "column3": { 
      "display": "1 year", 
      // Convert '1 year' to 777600000 (or try your own convertion algorithm) 
      "timestamp": "777600000" 
     } 
    }, 
    { 
     "column1": "column1_data", 
     "column2": "column2_data", 
     "column3": { 
      "display": "1 month", 
      "timestamp": "12960000" 
     } 
    }, 
    ..... 
] 

Затем при инициализации DataTables попробовать это:

$('#myTable').DataTables({ 
    .... 
    "columns": [ 
     { data: "column1" }, 
     { data: "column2" }, 
     { 
     data: "column3", 
     render: { 
      _: 'display', 
      sort: 'timestamp' 
     } 
     } 
    ], 
    .... 
}); 

Таким образом, вы показываете дату в не сортируемом формате (1 год , 5 месяцев и т. Д.), Но вы сортируете этот столбец атрибутом «timstamp».

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


ДАТА Convertion ПРЕДЛОЖЕНИЕ

Вы просто преобразование буквального представления интервала времени в секунды

/** 
* Function that convert a literal (n text) in to a number representing a timestamp 
*/ @param literal {string} Text in specific format (n text): n {number} [blank] text {string} ('year','month','day','hour','minute','second') 
*/ 
function convertLiteralToTimeSpan(literal) { 
    .... 
} 

function convertLiteralToTimeSpan(literal) { 
 
     var textObj = { 
 
      'second': '1', 
 
      'minute': '60', 
 
      'hour': '3600', 
 
      'day': '216000', 
 
      'month': '12960000', 
 
      'year': '777600000' 
 
     }; 
 
     var literalArr = literal.split(' '); 
 
     var num = literalArr [0]; 
 
     var txt = literalArr [1]; 
 
     var factor = textObj[txt]; 
 
     
 
     return parseInt(num) * parseInt(factor); 
 
    } 
 

 
    var test = convertLiteralToTimeSpan('1 year'); 
 
    var test_month = convertLiteralToTimeSpan('1 month'); 
 
    var test_day = convertLiteralToTimeSpan('1 day'); 
 

 
    $('#result').html(test); 
 
    $('#result_month').html(test_month); 
 
    $('#result_day').html(test_day);
.result { font-weight:bold }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<span>1 year</span>: <span id="result" class="result"></span><br /> 
 
<span>1 month</span>: <span id="result_month" class="result"></span><br /> 
 
<span>1 day</span>: <span id="result_day" class="result"></span>

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