2012-09-13 3 views
0

У меня есть ArrayCollection, который я хотел бы сортировать по дате, а затем по времени (в случае, если есть два элемента с одинаковой датой). У меня есть сортировка по дате (ГГГГ/ММ/ДД), но я не могу понять бит времени, время в формате 24 часа, поэтому код будет в основном таким же, как и для даты.sort ArrayCollection по дате, а затем - Flex

Это код, который я использовал для сортировки по дате, он отлично работает.

import mx.collections.SortField; 
import mx.collections.Sort; 

private function sort():void 
{ 
var dataSortField:SortField = new SortField(); 
dataSortField.name = "date"; 

var arrayDataSort:Sort = new Sort(); 
arrayDataSort.fields = [dataSortField]; 

reminderXMLArray.sort = arrayDataSort; 
reminderXMLArray.refresh(); 
} 
+0

Есть дата и время, чтобы выделить два отдельных поля? Или они в одном поле? Если в том же поле, я удивлен, что вы делаете, не работает. Возможно, вам придется перейти к функции SortCompareFunction. – JeffryHouser

+0

Это два отдельных поля. – user1584282

+0

В этом случае; вам нужно использовать функцию sortCompare. Похоже, что Иван дал более подробную информацию в формальном ответе. – JeffryHouser

ответ

2

Вы можете использовать этот код для сортировки по дате и время:

private function sort():void 
{ 
    var dataSortField:SortField = new SortField(); 
    dataSortField.name = "date"; 
    dataSortField.compareFunction = function (a:Object, b:Object) : int { 
     var na:Number = a.date.getTime(); 
     var nb:Number = b.date.getTime(); 

     if (na < nb) 
      return -1; 

     if (na > nb) 
      return 1; 

     return 0; 
    }; 

    var arrayDataSort:Sort = new Sort(); 
    arrayDataSort.fields = [dataSortField]; 

    reminderXMLArray.sort = arrayDataSort; 
    reminderXMLArray.refresh(); 
} 
+1

См. Также 'ObjectUtil.dateCompare'. – approxiblue

0

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

var sort:Sort = new Sort(); 
var fields:Array = [ new SortField("date"), new SortField("time") ]; 
sort.fields = sort;