0

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

如果我将排序字段 (dataSortField.name) 更改为“名称”(只是基于我的 xml 源生成的文件名的字母数字文本字符串),则该例程有效,但如果我使用“日期修改”作为排序字段(即 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 PM。所以它使用日期/时间作为常规文本字符串

// 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 更改为“name”(它们是字母数字文件名),它的排序就很好......所以我如何让它按 DATE 排序,其中我的数组数据看起来像 2013 年 7 月 24 日 12:00 :00 下午

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

我尝试指定

dataSortField.numeric = true;

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

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

4

1 回答 1

1

我将其用作日期比较功能:

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();
于 2013-10-16T12:28:38.670 回答