2012-07-20 2 views
2

나는 그 안에 날짜가있는 텍스트 입력 필드 인 템플릿 필드 ($ fields [3]) 중 하나를 사용하여 목록을 정렬하려고합니다. 문제는 날짜의 형식 때문에 숫자를 비교하는 것 같기 때문에 정확하게 정렬되지 않기 때문입니다.usort 날짜 지원

정렬이 발생하기 전에 dateformat을 변경해야한다고 생각하지만 지금까지이 작업을 수행하지 않았습니다. 내가 지금처럼에 usort 기능을 사용하려고

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

이 데이터를 정렬하지만 이전 (필드 3는이 일/월/년 같은 형식되는 날짜와 함께 하나입니다) 왜냐하면 나는 올바른 순서가 아닌 아무 것도 변경하지 않았기 때문입니다. 누구든지 정렬하기 전에 날짜 형식을 다시 지정할 수 있습니까?

많은 감사

크리스

답변

0

최초의 타임 스탬프로 문자열을 변환보십시오 :

function do_sort($a, $b) { 
    $aval = strtotime($a); 
    $bval = strtotime($b); 
    if ($aval == $bval) { 
     return 0; 
    } 
    return $aval < $bval ? -1 : 1; 
} 
+0

빠른 질문 :'한 strtotime()'패턴이'일/월/yyyy' 또는 'MM/DD/yyyy' 여부를 결정합니까? 'strtotime()'이 그 문제로 인해 작동하지 않는 날짜가있을 것이라고 생각합니다. – Palladium

+0

이해할 수있는 형식은 다음과 같습니다. http://us3.php.net/manual/en/datetime.formats.date.php –

+0

그 이상의 것을 필요로하는 경우에는 다음과 같은 로케일 인식 기능을 사용해야 할 것입니다. Zend_Date. (아니면 그냥 직접 파싱해라.) –

2

그것을 할 수 있었다. 다른 사람이 관심이 있다면 나는 다음과 같은 기능을 사용 :

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); 
관련 문제