2011-03-17 7 views
2

날짜를 현재 시간과 비교하고 멋지게 형식화 된 문자열을 반환하는 함수를 만들려고합니다.
나는 서둘러 코드를 작성했지만 제대로 작동하지만 더 효율적인 방법을 찾고있다. 내 코드는 다음과 같습니다.시간 차이를 포맷하는 함수

function _formatDate($dateStr) 
    { 
    $timestr = ""; 
    $t= time() - strtotime($dateStr); 
    if($t < 60) { 
     $timestr = "{$t} seconds ago"; 
    } 
    elseif ($t <120) { 
     $timestr = "about a minute ago"; 
    } 
    elseif ($t < 3600) { 
     $minute = floor($t/60); 
     $timestr = "{$minute} minutes ago"; 
    } 
    elseif ($t < 7200) { 
     $timestr = " about an hour ago"; 
    } 
    elseif ($t < 86400) { 
     $hour = floor($t/3600); 
     $timestr = "{$hour} hours ago"; 
    } 
    elseif ($t < 172800) { 
     $timestr = "a day ago"; 
    } 
    elseif ($t < 2592000) { 
     $day = floor($t/86400); 
     $timestr = "{$day} days ago"; 
    } 
    elseif ($t < 5184000){ 
     $timestr = "about a month ago"; 
    } 
    else { 
     $month = floor($t/2592000); 
     $timestr = "{$month} months ago"; 
    } 
    return $timestr; 
} 
+0

내가 날짜를 통과하려고 조건 "을" 인수로 그것을 자동으로 formated 예 : 12 분 전, 또는 3 일 전 – Ibu

+1

반환 그래서 당신의 코드에 문제가 있습니까? 네가 묻는 것을하는 것처럼 보였다. 이것이 웹 페이지의 경우 날짜/시간 스탬프로 출력 한 다음 JS (및 TimeAgo와 같은 라이브러리)를 사용하여 값을 업데이트하면 도움이됩니다. – Rudu

+0

나는 그것을하기위한보다 효율적인 방법이 있는지 알고 싶다. if else statement. – Ibu

답변

4

일부 코드를 내가 사용하고 될 수있는 함수의 두 번째 인수를 사용하는 경우는 실패한 적이 없어요, 그냥에서 유닉스 타임 스탬프를 넣어

echo timeDiffrence('1300392875'); 

function timeDiffrence($from, $to = null){ 
    $to = (($to === null) ? (time()) : ($to)); 
    $to = ((is_int($to)) ? ($to) : (strtotime($to))); 
    $from = ((is_int($from)) ? ($from) : (strtotime($from))); 
    $units = array 
    (
    "y" => 29030400, // seconds in a year (12 months) 
    "month" => 2419200, // seconds in a month (4 weeks) 
    "w" => 604800, // seconds in a week (7 days) 
    "d" => 86400, // seconds in a day (24 hours) 
    "h" => 3600,  // seconds in an hour (60 minutes) 
    "m" => 60,  // seconds in a minute (60 seconds) 
    "s" => 1   // 1 second 
    ); 
    $diff = abs($from - $to); 
    $suffix = (($from > $to) ? ("from now") : ("ago")); 
    foreach($units as $unit => $mult) 
    if($diff >= $mult) 
    { 
     //$and = (($mult != 1) ? ("") : ("and ")); 
     $output .= "".$and.intval($diff/$mult)."".$unit.((intval($diff/$mult) == 1) ? ("") : ("")); 
     $diff -= intval($diff/$mult) * $mult; 
    } 
    $output .= " ".$suffix; 
    $output = substr($output, strlen("")); 
    if($output =='go' || $output ==' ago'){$output = 'A few secs ago';} 
    return $output; 
} 
1

자바 스크립트에서 수행하는 것이 좋습니다. jquery에 TimeAgo 플러그인을 사용할 수 있습니다. 이것에 대한 멋진 점은 페이지 새로 고침없이 클라이언트 측에서 실시간으로 업데이트된다는 것입니다. 이것은 사용하기가 쉽지 않고 요구 사항에 맞습니다.

관련 문제