我正在尝试通过我的一个模板字段($ fields [3])对列表进行排序,这是一个文本输入字段,其中包含日期。问题是由于日期的格式不能正确排序,因为我猜它只是比较数字。
我认为我需要在排序发生之前更改dateformat,但到目前为止还没有做到这一点。
我正在尝试像这样使用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);
这会对数据进行排序,但与以前一样,因为我没有更改任何内容,而是没有按正确的顺序进行。任何人都可以帮我在排序之前重新格式化日期吗?
非常感谢
克里斯
答案 0 :(得分:3)
管理这样做。如果有其他人感兴趣我使用了以下功能:
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);
答案 1 :(得分:0)
首先尝试将字符串转换为时间戳:
function do_sort($a, $b) {
$aval = strtotime($a);
$bval = strtotime($b);
if ($aval == $bval) {
return 0;
}
return $aval < $bval ? -1 : 1;
}