这让我很疯狂,我需要按日期对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;
}
}
但是这似乎仍然试图按字母顺序对列进行排序。
任何帮助都将不胜感激。
答案 0 :(得分: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)
- 我添加了“舍入”以使其表现为原始答案。
答案 1 :(得分:0)
正如评论中所提到的,转换为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;
}
}