SQL 데이터베이스에서 받아온 밀리초 단위의 타임스탬프를 사람이 읽을 수 있는 날짜 문자열로 변환하려면 PHP의 DateTime 클래스와 setTimestamp() 메서드를 활용하면 됩니다.
입력값 예시
예를 들어, 변환할 입력값이 다음과 같은 타임스탬프(밀리초 단위)라고 가정해 보겠습니다.
$SQLTimestamp = 1600320600000;
출력 목표
최종적으로 얻고자 하는 결과는 아래와 같은 형식의 날짜 문자열입니다.
2020-09-17 05:30:00
변환 절차
PHP의 DateTime::setTimestamp()는 초(second) 단위의 유닉스 타임스탬프를 기준으로 동작하기 때문에, 먼저 밀리초 단위의 SQL 타임스탬프를 1000으로 나누어 초 단위 값으로 변환해야 합니다.
$seconds = round($SQLTimestamp/1000, 0);
이렇게 구한 초 단위 값을 setTimestamp()에 전달한 뒤, format() 메서드로 원하는 형식의 문자열을 출력하면 됩니다.
전체 예제 코드
<!DOCTYPE html>
<html>
<body>
<?php
// 밀리초 단위의 SQL 타임스탬프
$SQLTimestamp = 1600320600000;
// 밀리초를 초 단위로 변환
$seconds = round($SQLTimestamp/1000, 0);
// DateTime 객체 생성 후 타임스탬프 설정
$PHPDateObject = new DateTime();
$PHPDateObject->setTimestamp($seconds);
// 원하는 형식으로 출력
echo $PHPDateObject->format('Y-m-d H:i:s');
?>
</body>
</html>실행 결과
2020-09-17 05:30:00
format() 형식 문자 설명
- Y : 4자리 연도 (예: 2020)
- m : 2자리 월 (01~12)
- d : 2자리 일 (01~31)
- H : 24시간제 시간 (00~23)
- i : 분 (00~59)
- s : 초 (00~59)
format()에 전달하는 형식 문자를 조합하면 '2020/09/17'처럼 슬래시 구분 형식이나 '2020년 9월 17일'과 같은 한글 표기 등 다양한 출력 형태를 자유롭게 만들 수 있습니다. 또한 서버의 기본 시간대가 아닌 특정 시간대를 적용하고 싶다면 DateTime 생성 시 두 번째 인자로 new DateTimeZone('Asia/Seoul')을 함께 전달하면 됩니다.