Сортировать даты в Flash AS3 DataGrid - PullRequest
0 голосов
/ 17 января 2012

Это сводит меня с ума, мне нужно отсортировать столбец 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;
        }
    }

Но, похоже, это все-таки пытается отсортировать столбец по алфавиту.

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 17 января 2012

Ответ от 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) - я добавил «округление», чтобы оно действовало как исходный ответ.

0 голосов
/ 17 января 2012

Как уже упоминалось в комментариях, конвертация в unix timestamp работает:

    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;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...