PHP와 JavaScript로 구현하는 게시물 등록일 상대 표기

2025. 5. 28. 22:08·Programing/PHP
반응형

상대 시간 표기가 필요한 이유

웹사이트나 블로그에서 게시물의 등록일을 "2024-06-01 13:45"와 같은 절대 시간으로 표기하는 대신 "1시간 전", "3일 전"처럼 사람이 직관적으로 이해하기 쉬운 "상대 시간"으로 보여주는 방식은 사용자 경험(UX)을 크게 향상시킵니다.

이러한 방식은 댓글, 알림, 블로그 포스트, 게시판 등 시간에 민감한 콘텐츠에 특히 유용하며, 사용자가 정보를 더 빠르게 해석할 수 있도록 돕습니다.


상대 시간 변환 기준

아래는 상대 시간 표기를 위한 변환 기준입니다:

  • 60초 이내 → "1분 전"
  • 1시간 이내 → "n분 전"
  • 하루 이내 → "n시간 전"
  • 한 달 이내 → "n일 전"
  • 1년 이내 → "n개월 전"
  • 1년 이상 → "n년 전"

PHP로 구현하기

PHP에서는 time() 값으로 저장된 타임스탬프를 기준으로 상대 시간을 계산할 수 있습니다.

function timeAgo($timestamp) {
    $now = time();
    $diff = $now - $timestamp;

    if ($diff < 60) return "1분 전";
    if ($diff < 3600) return floor($diff / 60) . "분 전";
    if ($diff < 86400) return floor($diff / 3600) . "시간 전";
    if ($diff < 2592000) return floor($diff / 86400) . "일 전";
    if ($diff < 31536000) return floor($diff / 2592000) . "개월 전";
    return floor($diff / 31536000) . "년 전";
}

// 사용 예시
echo timeAgo(strtotime("2023-12-20"));

PHP 주의사항

  • $timestamp가 미래일 경우에는 별도 예외 처리가 필요합니다.
  • 타임존 설정이 맞지 않으면 오차가 발생할 수 있으니 date_default_timezone_set() 설정 확인이 필요합니다.

JavaScript로 구현하기

JavaScript에서는 클라이언트 측에서 동적으로 상대 시간을 표현할 수 있어 사용자 인터페이스 개선에 적합합니다.

function timeAgo(timestamp) {
  const now = Math.floor(Date.now() / 1000);
  const diff = now - timestamp;

  if (diff < 60) return "1분 전";
  if (diff < 3600) return Math.floor(diff / 60) + "분 전";
  if (diff < 86400) return Math.floor(diff / 3600) + "시간 전";
  if (diff < 2592000) return Math.floor(diff / 86400) + "일 전";
  if (diff < 31536000) return Math.floor(diff / 2592000) + "개월 전";
  return Math.floor(diff / 31536000) + "년 전";
}

// 사용 예시
console.log(timeAgo(Math.floor(new Date("2023-12-20").getTime() / 1000)));

JavaScript 주의사항

  • timestamp는 초 단위 Unix 타임스탬프여야 합니다 (밀리초 아님)
  • 클라이언트 시간이 조작되었거나 서버와 동기화되지 않은 경우에는 오차가 발생할 수 있습니다.

출력 예시 비교

현재 시간 기준 입력 값 시간 출력 결과
2024-06-01 15:00:00 2024-06-01 14:59:30 "1분 전"
2024-06-01 15:00:00 2024-06-01 14:30:00 "30분 전"
2024-06-01 15:00:00 2024-05-31 15:00:00 "1일 전"
2024-06-01 15:00:00 2023-06-01 15:00:00 "1년 전"

마무리 및 추천 자료

"게시물 등록일 처리"는 작지만 사용자와의 소통을 자연스럽게 만들어주는 중요한 기능입니다. PHP와 JavaScript 양쪽에서 구현할 수 있기 때문에, 프론트엔드와 백엔드의 협업 시 시간 동기화 로직도 함께 고려하는 것이 좋습니다.

관련 내용을 더 깊이 배우고 싶다면 다음 리소스를 추천합니다:

  • MDN Date.now()
  • PHP time()
  • replit JS 실습 환경

시간 포맷과 관련된 기초부터 다양한 사용자 인터페이스 구현까지 함께 학습해보시기 바랍니다.

반응형

'Programing > PHP' 카테고리의 다른 글

php 비밀번호 유효성 검사  (1) 2025.04.22
PHP 이메일 유효성 검사  (0) 2025.04.22
🔐 PHP로 문자열 중간을 마스킹하는 함수  (1) 2025.04.18
PHP SEED ECB 암/복호화 샘플코드  (0) 2023.05.15
PHP 윤년(leap year)체크  (0) 2019.06.26
PHP 배열 첫번째 키값 가지고 오기  (0) 2019.01.07
PHP 정규식 비밀번호 유효성 검사  (0) 2019.01.05
PHP 정규식 이메일 유효성 검사  (0) 2019.01.05
'Programing/PHP' 카테고리의 다른 글
  • php 비밀번호 유효성 검사
  • PHP 이메일 유효성 검사
  • 🔐 PHP로 문자열 중간을 마스킹하는 함수
  • PHP SEED ECB 암/복호화 샘플코드
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (457) N
      • 금융 (61)
      • Programing (280) N
        • Algorithm (39) N
        • API (2)
        • javascript (121)
        • CSS (6)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (17)
        • MS-SQL (1)
        • MySQL (12)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (5)
      • IT 일반 (15)
      • 리뷰 (1) N
        • Book (17)
        • 제품 (2) N
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (31)
        • 회고 (2)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    IT·컴퓨터
    디자인패턴
    Java
    js패턴
    jsp
    IT 관련
    사고 싶은 책
    위시리스트
    블로그
    읽고 싶은 책
    SQL
    JavaScript
    자바스크립트
    php
    자바
    It
    자바스크립트유틸
    IT블로그
    기초
    iT's MY LiFE
  • hELLO· Designed By정상우.v4.10.3
Dongkkase
PHP와 JavaScript로 구현하는 게시물 등록일 상대 표기
상단으로

티스토리툴바