프로그래밍 언어/PHP

[PHP] DateTime 클래스 사용법과 주의할 점 (feat. Timestamp)

DevPing9_ 2022. 9. 17. 15:18
해당 포스팅은 PHP 에서 DateTime 클래스의 Timestamp 메서드를 사용하여 UnixTimestamp 로 변경 시
마주할 수 있는 문제에 대한 포스팅입니다.

 

내가 유지보수하고 있는 PHP로 된 프로젝트에서 구매기록이 실제 DB 레코드와 다르게 나타나는 현상이 있었다.

 

해당 로직의 위치를 찾은 결과, DateTime 클래스를 생성해서 Timestamp 로 변환하고 있었고

변환된 Timestamp 를 기준으로 데이터를 조회하고 있었는데 눈으로는 아무 문제가 없어보였다.

 

혹시 Timestamp 로 변환하면서 날짜값이 잘못 들어간 것은 아닐까 싶어

아래와 같이 PHP Online Editor 에서 해당로직을 구현해도 아무 문제가 없어보였다.

 

분명 UnixTimestamp 로 변환된 값을 기준으로 조회를 하여 데이터를 받아오는데 왜 실제 쿼리결과와 다른 것일까..
위에 첨부된 Online Editor 의 출력결과를 보면 DateTime 객체에 UTC 라는 값이 포함된 것이 보인다.
해당 값을 KST 로 바꾸어 보았다.

 

 

...! 😨😨😨
DateTime 객체를 생성할 때, 뒤에 타임존 옵션을 주지 않으면 실행되는 컴퓨팅 시스템의 타임존을 디폴트 옵션으로 인식하게 되는 것이었다..

실행되는 어플리케이션은 일본에서 실행되고 있었기에, 일본의 TimeZone 을 따라갔고
그 결과 실제 필요한 DB 레코드와 상이한 레코드들이 반환되는 것이었다. 

 

 

# Reference

 

PHP에서 DateTime Class 사용하기

PHP에서의 DateTime은 늘 문자열로 처리되어 를 엄청나게 사용하게 되고, 기간 비교를 위해 timestamp를 직접 다뤄야 하는 번거로움 등 불편함을 다 적기에 시간이 부족할 정도다. 5.2.0 이후 지원되는

edykim.com

 

 

convert timestamp to date time in php

1517317337107 it should be: Wed Jan 31 00:02:17 GMT+11:00 2018 I verify this on https://www.epochconverter.com/ the result is: Assuming that this timestamp is in milliseconds: GMT: Tuesday, Janu...

stackoverflow.com

 

728x90