2

我正在尝试按我的模板字段之一($fields[3])对我的列表进行排序,该模板字段是一个带有日期的文本输入字段。问题是由于日期的格式,它不会正确排序,因为我猜它只是比较数字。

我想我需要在排序之前更改日期格式,但到目前为止还没有做到这一点。

我正在尝试像这样使用 usort 函数(字段 3 是日期格式为 dd/mm/yyyy 的字段),

if (!function_exists('do_sort')) {
    function do_sort($a, $b) {
        return $a->fields[3] > $b->fields[3];
    }}

$data = $params['data'];
usort($data, 'do_sort');
$smarty->assign('sorted', $data);

这对数据进行了排序,但和以前一样,因为我没有更改任何内容,而且顺序不正确。谁能帮我在排序前重新格式化日期?

非常感谢

克里斯

4

2 回答 2

4

设法做到了。如果其他人有兴趣,我使用以下功能:

   function date_compare($a, $b)
    {
        $t1 = strtotime($a->fields[3]);
        $t2 = strtotime($b->fields[3]);
        return $t1 - $t2;
    }    
    $data = $params['data'];
    usort($data, 'date_compare');
    $smarty->assign('sorted', $data);
于 2012-07-20T17:10:19.093 回答
0

尝试先将字符串转换为时间戳:

function do_sort($a, $b) {
    $aval = strtotime($a);
    $bval = strtotime($b);
    if ($aval == $bval) {
        return 0;
    }
    return $aval < $bval ? -1 : 1;
}
于 2012-07-20T17:01:16.750 回答