2013-06-27 5 views
2
내가 알고 싶은

에 상대 시간에 MySQL의 테이블의 타임 스탬프를받는 방법, 단계적으로는 방법은 (사초 전 5 개월 상대 시점으로 내 MySQL의 테이블타임 스탬프 변환하기 전 ...) 내 웹 사이트에.웹 사이트

필자는 함수 선언에 어려움을 겪고 있습니다. 자세한 내용은 타임 스탬프 열의 이름은 "creation"이고 내 테이블 이름은 "users"입니다.

대단히 감사합니다.

코드를 시도해 보았습니다.

function relativedate($secs) { 
    $second = 1; 
    $minute = 60; 
    $hour = 60*60; 
    $day = 60*60*24; 
    $week = 60*60*24*7; 
    $month = 60*60*24*7*30; 
    $year = 60*60*24*7*30*365; 

    if ($secs <= 0) { $output = "now"; 
    }elseif ($secs > $second && $secs < $minute) { $output = round($secs/$second)." second"; 
    }elseif ($secs >= $minute && $secs < $hour) { $output = round($secs/$minute)." minute"; 
    }elseif ($secs >= $hour && $secs < $day) { $output = round($secs/$hour)." hour"; 
    }elseif ($secs >= $day && $secs < $week) { $output = round($secs/$day)." day"; 
    }elseif ($secs >= $week && $secs < $month) { $output = round($secs/$week)." week"; 
    }elseif ($secs >= $month && $secs < $year) { $output = round($secs/$month)." month"; 
    }elseif ($secs >= $year && $secs < $year*10) { $output = round($secs/$year)." year"; 
    }else{ $output = " more than a decade ago"; } 

    if ($output <> "now"){ 
     $output = (substr($output,0,2)<>"1 ") ? $output."s" : $output; 
    } 
    return $output; 
} 



echo relativedate(60); // 1 minute 
+0

* 친절 *입니다. 필요한 것은 시도한 코드를 표시하거나 게시하는 것입니다. – Rikesh

+0

여러 코드를 발견했는데 작동하지 않았습니다 ... 복사/붙여 넣기 만하면 통합하는 방법을 모르겠습니다 ... –

+0

그리고이 코드가 작동하지 않습니다. 어떤 형식으로 mysql에서 시간을 얻고 있습니까? – Rikesh

답변

2

상대 시간/날짜를 표시하려면 CASE를 사용하십시오. 이 코드에서 'sample'테이블을 생성했습니다.

SELECT *, CASE 
WHEN creation between date_sub(now(), INTERVAL 60 minute) and now() THEN concat(minute(TIMEDIFF(now(), creation)), ' minutes ago') 
WHEN datediff(now(), creation) = 1 THEN 'Yesterday' 
WHEN creation between date_sub(now(), INTERVAL 24 hour) and now() THEN concat(hour(TIMEDIFF(NOW(), creation)), ' hours ago') 
ELSE date_format(creation, '%a, %m/%d/%y') 
END as date FROM sample 

이렇게하면 상대 시간을 출력하는 데 사용할 수있는 '날짜'열이 새로 만들어집니다.

+0

이 오류 코드가 있습니다 : 구문 분석 오류 : 예기치 않은 ','...에서 –

+0

이 검색어를 포함시켜야합니다. SELECT * FROM 샘플을 거기서 사용하고 CASE 절을 포함하도록 변경하고 변환 된 행을 출력 할 수 있습니다 (예 : 날짜). –

+0

제공하는 코드는 어디에서 추가해야합니까? –

0

당신은 PHP를 통해 요청한 것을 할 수 있습니다 ("시간전"이라고 함). 여기

  • a relevant SO question 것, 여기에 php-time-ago
  • GitHub의에 PHP 플러그인입니다 - time_elapsed_string()time_ago() 기능을 시도
  • 클라이언트 측 변환을 수행하고자하는 경우에 jQuery 플러그인은,도있다
  • , timeago
+0

답변 해 주셔서 감사합니다.나는 아직도 2 가지 문제가있다. 나는 github의 첫 번째 예제를 시도했다. 첫째, 그것은 나에게이 오류를 준다. Class 'TimeAgo'not found .... 또한, 예제에서 제공 한 날짜에 대한 데이터베이스의 날짜를 어떻게 넣을 수 있습니까? –

+0

코드에 timeago.inc.php를 포함 시켰습니까? 귀하의 날짜에 관해서는 ... 코드의 빠른 점검 후 dateDifference() 함수의 두 번째 매개 변수입니다. –

2

저는 Jm Verastigue를 좋아했으며 현재 연도와 현재 연도 외의 다른 날짜의 향상을 위해 조금 더 조정했습니다. 또한 utc_time에만 적용되었지만 now() 접근법도 유효합니다.

SELECT 
report_time, 
convert(CASE 
    WHEN 
     report_time between date_sub(utc_timestamp(), 
      INTERVAL 60 minute) and utc_timestamp() 
    THEN 
     concat(minute(TIMEDIFF(utc_timestamp(), report_time)), 
       ' minutes ago') 
    WHEN datediff(utc_timestamp(), report_time) = 1 THEN 'Yesterday' 
    WHEN 
     report_time between date_sub(utc_timestamp(), INTERVAL 24 hour) and utc_timestamp() 
    THEN 
     concat(hour(TIMEDIFF(utc_timestamp(), report_time)), 
       ' hours ago') 
    WHEN 
     year(report_time) >= year(utc_timestamp()) 
    THEN 
     date_format(report_time, '%e %b') 
    ELSE date_format(report_time, '%Y-%m-%d') 
END using utf8) as `LekkerDate` 

FROM 
     _smry_prodinfo 
    group by `LekkerDate`;