Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP로 타임스탬프를 '~전' 형식의 상대 시간으로 변환하는 방법

웹 서비스에서는 게시글이나 댓글이 작성된 시각을 "3분 전", "2시간 전"처럼 표시하는 경우가 많습니다. 이번 글에서는 주어진 타임스탬프(timestamp)를 이러한 상대 시간 형식으로 변환하는 PHP 프로그램을 소개합니다.

예제 코드

<?php
function to_time_ago( $time )
{
   $difference = time() - $time;
   if( $difference < 1 )
   {
      return 'less than only a second ago';
   }
   $time_rule = array (
      12 * 30 * 24 * 60 * 60 => 'year',
      30 * 24 * 60 * 60 => 'month',
      24 * 60 * 60 => 'day',
      60 * 60 => 'hour',
      60 => 'minute',
      1 => 'second'
   );
   foreach( $time_rule as $sec => $my_str )
   {
      $res = $difference / $sec;
      if( $res >= 1 )
      {
         $t = round( $res );
         return $t . ' ' . $my_str .
         ( $t > 1 ? 's' : '' ) . ' ago';
      }
   }
}
echo "The timestamp to time ago conversion is ";
echo to_time_ago( time() - 600);
?>

실행 결과

The timestamp to time ago conversion is 10 minutes ago

코드 동작 원리

이 프로그램의 핵심은 to_time_ago라는 이름의 함수입니다. 함수가 호출되면 먼저 현재 시간을 반환하는 time() 함수와 매개변수로 전달받은 시간 사이의 차이를 계산합니다.

만약 두 시간의 차이가 1초 미만이라면, 함수는 즉시 "1초도 지나지 않았다"는 문자열을 반환하고 종료됩니다.

차이가 1초 이상인 경우에는 연(year), 월(month), 일(day), 시(hour), 분(minute), 초(second)에 해당하는 초 단위 값을 키로, 각 시간 단위 이름을 값으로 하는 배열을 생성합니다. 배열은 큰 단위부터 작은 단위 순으로 정렬되어 있어, 가장 적합한 시간 단위를 우선적으로 찾을 수 있습니다.

이후 foreach 반복문을 사용해 배열을 순회하면서, 계산된 시간 차이를 각 단위의 초 값으로 나눕니다. 나눈 결과가 1 이상이 되는 첫 번째 단위를 찾으면, 그 값을 반올림하여 최종 문자열을 만들어 반환합니다. 값이 1보다 크면 복수형 접미사 's'가 붙어 "10 minutes ago"와 같은 자연스러운 표현이 완성됩니다.

활용 팁

한국어 서비스에 적용하려면 반환 문자열을 "10분 전", "2시간 전" 형식으로 바꾸면 됩니다. 또한 실무에서는 윤년이나 월별 일수 차이까지 고려하기 위해 DateTime 클래스와 diff() 메서드를 활용하는 방법도 있으니, 더 정밀한 계산이 필요하다면 함께 참고하시기 바랍니다.