【问题标题】:Sort dates in a Flash AS3 DataGrid在 Flash AS3 DataGrid 中对日期进行排序
【发布时间】:2012-02-12 03:01:34
【问题描述】:

这让我发疯了,我需要按日期对 Flash DataGrid 列(不是 Flex)进行排序。我试过给日期列一个排序函数,如下所示:

            colTwo.sortCompareFunction = sortDate;

这就是函数:

        private function sortDate ($obj1,$obj2) : int {

        trace("created date in sort "+$obj1["created"]);

        var t1:Array = $obj1["created"].toString().split("-");
        var t2:Array = $obj2["created"].toString().split("-");
        var t1dt:Number=(new Date(Number(t1[0]),Number(t1[1]),Number(t1[2]))).getTime();
        var t2dt:Number=(new Date(Number(t2[0]),Number(t2[1]),Number(t2[2]))).getTime();

        trace(t1dt);

       if(t1dt < t2dt) {
            return -1;
        } else if(t1dt == t2dt) {
            return 0;
        } else {
            return 1;
        }
    }

但这似乎仍然试图按字母顺序对列进行排序。

任何帮助将不胜感激。

【问题讨论】:

  • 不能按 UNIX 时间戳排序吗?
  • 我进行了一些搜索并将我的日期转换为 unix 时间戳,这很有效,谢谢。

标签: flash actionscript-3 datagrid


【解决方案1】:

redHouse71 的回答是好的,因为它会给你一个正确的结果,但作为一个代码示例......好吧,下面是另一个变体,它基本上做同样的事情,但不那么罗嗦。

private function sortDate(a:Object, b:Object):int
{
    var difference:Number = 
        this.truncateDate(a) - this.truncateDate(b);

    return difference / Math.abs(difference);
}
// replace Object with the proper type
private function truncateDate(object:Object):uint
{
    return (object.created as Date).time * 0.0001;
}

编辑:但为什么你必须将日期截断为秒?此外,没有必要严格返回 -1、0、1,基本上你可以只用 this.truncateDate(a) - this.truncateDate(b) 取消 - 我添加了“四舍五入”以使其表现得与原始答案一样。

【讨论】:

    【解决方案2】:

    如 cmets 中所述,转换为 unix 时间戳有效:

        public function sortDate ($obj1,$obj2) : int {
    
            var dateOne:Date = $obj1["created"];
            var epoch:Number = Math.round(dateOne.valueOf()/1000);
    
            var dateTwo:Date = $obj2["created"];;
            var epochTwo:Number = Math.round(dateTwo.valueOf()/1000);
    
    
            var t1dt:Number = epoch;
            var t2dt:Number = epochTwo;
    
           if(t1dt < t2dt) {
                return -1;
            } else if(t1dt == t2dt) {
                return 0;
            } else {
                return 1;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2011-05-13
      • 2013-01-26
      • 2015-11-02
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 2012-04-25
      • 1970-01-01
      相关资源
      最近更新 更多