@drrcknlsn 은 시간 문자열을 데이터 시간으로 변환하는 여러 가지 방법이 있다고 주장 하는 것이 옳지 만, 이러한 다른 방법이 동일한 방식으로 시간대를 처리하지 않는다는 점을 인식하는 것이 중요합니다.
옵션 1 : DateTime('@' . $timestamp)
다음 코드를 고려하십시오.
date_format(date_create('@'. strtotime('Mon, 12 Dec 2011 21:17:52 +0800')), 'c');
strtotime
비트는 시간대 정보를 제거하고, date_create
기능이 GMT를 가정합니다 ( Europe/Brussels
).
따라서 어떤 서버에서 실행하더라도 출력은 다음과 같습니다.
2011-12-12T13:17:52+00:00
옵션 2 : date_create()->setTimestamp($timestamp)
다음 코드를 고려하십시오.
date_format(date_create()->setTimestamp(strtotime('Mon, 12 Dec 2011 21:17:52 +0800')), 'c');
이것이 동일한 출력을 생성 할 것으로 예상 할 수 있습니다. 그러나 벨기에 서버에서이 코드를 실행하면 다음과 같은 출력이 나타납니다.
2011-12-12T14:17:52+01:00
date_create
함수 와 달리이 setTimestamp
방법은 'Europe/Brussels'
GMT가 아닌 서버의 시간대 ( 제 경우)를 가정합니다 .
시간대를 명시 적으로 설정
출력이 입력의 시간대와 일치하는지 확인하려면 명시 적으로 설정하는 것이 가장 좋습니다.
다음 코드를 고려하십시오.
date_format(date_create('@'. strtotime('Mon, 12 Dec 2011 21:17:52 +0800'))->setTimezone(new DateTimeZone('Asia/Hong_Kong')), 'c')
이제 다음 코드도 고려하십시오.
date_format(date_create()->setTimestamp(strtotime('Mon, 12 Dec 2011 21:17:52 +0800'))->setTimezone(new DateTimeZone('Asia/Hong_Kong')), 'c')
입력의 시간대와 일치하도록 출력의 시간대를 명시 적으로 설정했기 때문에 둘 다 동일한 (올바른) 출력을 생성합니다.
2011-12-12T21:17:52+08:00