2012-01-17 7 views
0

これは私を夢中にしています。Flash DataGridの列(Flex以外)を日付順に並べ替える必要があります。私は以下のように日付の列にソート機能を付与しようとしている:Flash AS3 DataGridの日付を並べ替える

  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タイムスタンプに変換し、コメントで述べたように

+1

UNIXのタイムスタンプでソートできませんか? – AsTheWormTurns

+0

私はいくつかの検索を行い、自分の日付をUNIXのタイムスタンプに変換してくれました。 – redHouse71

+0

歓迎します:-) – AsTheWormTurns

答えて

1

redHouse71によって答えは、それはあなたが正しい結果を与えてしまうため、OKですが、コード例など...よく、下記本質的には同じことをしているが、あまり語られていない別の変種である。

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; 
} 

EDIT:なぜ、日付を秒単位で切り捨てる必要がありますか?また、厳密に-1、0、1を返す必要はありません。基本的にはちょうどthis.truncateDate(a) - this.truncateDate(b)で取り除くことができます。元の答えとして動作させるために丸めを追加しました。

0

は動作します:

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; 
     } 
    } 
関連する問題