반응형
상대 시간 표기가 필요한 이유
웹사이트나 블로그에서 게시물의 등록일을 "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 양쪽에서 구현할 수 있기 때문에, 프론트엔드와 백엔드의 협업 시 시간 동기화 로직도 함께 고려하는 것이 좋습니다.
관련 내용을 더 깊이 배우고 싶다면 다음 리소스를 추천합니다:
시간 포맷과 관련된 기초부터 다양한 사용자 인터페이스 구현까지 함께 학습해보시기 바랍니다.
반응형
'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 |