PHP 날짜/시간 Timezone, TimeStamp, DateTime 관계

PHP를 DateTime 클래스를 다루다 보면 입/출력에따라 타임존 오프셋(timezone offset)이 반영이 되는지 안되는지 헷갈리는 경우가 꽤 많은데 아래 두가지 principle만 알면 큰 실수는 하지 않을 수 있다.

  1. ‘now’ 등의 기능을 이용하여 현재시간을 타임스탬프로 얻어온다면 항상 이값은 UTC+0 기준 현재시간에 대한 타임스탬프이다. (PHP 디폴트 타임존과 무관)
  2. PHP에 디폴트 타임존이 설정된 상태로 DATETIME 스트링을 이용하여 DateTime 객체를 초기화 하면 해당 객체의 타임스탬프 값은 타임존 오프셋이 이미 반영된 값이다.

아래 예시를 보면 더 명확히 이해가 갈것이다.

입력 DATETIME 스트링이 동일하고 타임존이 다른 경우 결과

입력 TimeStamp값이 동일하고 타임존이 다른 경우 결과