是否可以根据日期/时间值而不是普通文本字符串/alpha 对 Flex 数组集合执行排序



我有一个从实时 XML 数据源创建的 flex 数组集合,并且正在尝试在让 UI 显示信息/列表之前使用数组中的日期/时间字符串对数组进行排序......当前数组已创建并显示正常,但按日期/时间排序无法正常工作...

如果我将排序字段 (dataSortField.name) 更改为"name"(仅基于我的 xml 源生成的文件名的字母数字文本字符串),则该例程有效,但是如果我使用"datemodified"作为排序字段(即 7/24/2013 12:53:02 PM ),它不会按日期排序,只是尝试按字母顺序排序,因此日期顺序根本不正确,例如它显示 1/10/2013 10:41:57 PM 然后而不是 2/1/2013 11:00:00 PM 接下来它显示 10/10/2013下午 5:37:18。 所以它使用日期/时间作为常规文本字符串

// SORTING THE ARRAY BY DATE DESCENDING...
  var dataSortField:SortField = new SortField();
  dataSortField.name = "datemodified";
  dataSortField.descending = false;
  var arrayDataSort:Sort = new Sort();
  arrayDataSort.fields = [dataSortField];
  arr.sort = arrayDataSort;
  arr.refresh();

现在,如果我将 dataSortField.name 更改为"名称"(这是字母数字文件名),它会对 a-z 进行排序就好了......那么我如何让它按日期排序,我的数组数据看起来像 2013/7/24 12:00:00 PM

现在,日期的 TIME 部分对于我的排序需求来说根本不是必需的,所以我只是希望按日期排序,除此之外的时间对我的需求无关紧要,而是在我的 xml 数据源中硬编码。

我尝试指定

dataSortField.numeric = true;

但这也没有用,虽然我可以使用它来指定字符串或数字,但没有我期望的 DATE 选项。

所以我的问题是,为了澄清,我如何让 SORT 函数确认我想根据数组中的一系列日期/时间戳进行排序? 我使用 apache flex 4.9.1/fb 4.6 高级版)。

我将其用作日期比较函数:

public static function genericSortCompareFunction_Date(obj1:Object, obj2:Object):int{
    //  * -1 if obj1 should appear before obj2 in ascending order.
    //  * 0 if obj1 = obj2.
    //  * 1 if obj1 should appear after obj2 in ascending order.
    // if you have an XML Datasource; you'll have to do something here to get the 
    // date objects out of your XML and into value1 and value2
    var value1:Date = obj1.dateField;
    var value2:Date = obj2.dateField;
    if(value1 == value2){
        return 0;
    }
    if(value1 < value2){
        return -1;
    }
    return 1;
}   

要将其应用于您的代码;您可以执行以下操作:

  var arrayDataSort:Sort = new Sort();
  arrayDataSort.compareFunction = genericSortCompareFunction_Date;
  arr.sort = arrayDataSort;
  arr.refresh();

最新更新