PHP에서 시간 관련 작업을 처리 할 때는 종종 두 기능 날짜 () 및 gmdate ()를 사용합니다. 그들 사이의 가장 큰 차이점은 시간대 처리입니다. date ()는 기본 시간대 (또는 설정 시간대)를 기준으로 시간을 출력하는 반면 GMDate ()는 그리니치 표준 시간 (GMT)에서 시간을 출력합니다.
따라서 많은 개발자들은 gmdate () 함수를 사용할 때 매우 일반적인 문제를 겪게됩니다. 출력 시간과 예상 현지 시간 사이에는 편차가 있습니다 . 이 기사에서는이 편견이 발생하는 이유를 자세히 설명하고 출력 시간을 더 잘 제어하는 데 도움이되는 몇 가지 솔루션을 제공합니다.
간단한 예를 살펴 보겠습니다.
<code> echo gmdate ( "ymd h : i : s", time ()); </코드>이 코드는 현재 GMT 시간 (즉, 시간 영역 0 시간)을 출력하며, 이는 로컬에서 볼 때부터 최대 8 시간 (예 : East Eighth District)을 나타냅니다.
예상되는 출력 시간이 특정 시간대 (예 : UTC+8, 베이징 시간)를 기준으로 한 경우 gmdate ()를 사용하는 것이 부적절합니다.
gmdate () 의 목적은 "GMT 타임 스탬프 형식"입니다. 즉, 서버가 현재 어떤 시간대를 설정하든 gmdate ()는 이를 무시하고 표준 시간 만 출력합니다. 이렇게하면 크로스 타임 영역을 다루거나 국제 시스템을 도킹 할 때 매우 유용합니다. 그러나 일상적인 개발에서 현지 시간이 필요한 경우 gmdate ()를 사용하는 것은 문제가 발생하기 쉽습니다.
이것은 가장 직접적이고 효과적인 방법입니다.
<code> date_default_timezone_set ( '아시아/상하이'); echo 날짜 ( "ymd h : i : s", time ()); </코드>이 방법은 먼저 Global Default Time Zone을 설정 한 다음 DATE ()을 사용하여 시간대와 일치하는 시간을 출력합니다. 이 방법은 현지 시간 만 필요한 대부분의 프로젝트에 적합합니다.
특별한 요구가있는 경우 gmdate () (예 : 타사 GMT API로 도킹)을 사용해야합니다. 시간대 오프셋을 수동으로 추가 할 수 있습니다.
<code> $ timestamp = time () + 8 * 3600; // gmt+8 echo gmdate ( "ymd h : i : s", $ timestamp); </코드>이 접근법은 간단하지만 "하드 코딩 된"시간 오프셋이므로 다중 시간 영역에서 지원하는 시스템에서는 권장되지 않습니다.
PHP의 DateTime 클래스는보다 강력한 시간 처리 기능을 제공하여 시간대를 정확하게 제어 할 수 있습니다.
<code> $ dt = new dateTime ( "now", new dateTimezone ( "Asia/Shanghai")); echo $ dt-> 형식 ( "ymd h : i : s"); </코드>또는 시간대로 돌리기 전에 UTC를 사용하여 처리 해야하는 경우 :
<code> $ dt = new DateTime ( "@". time ()); $ dt-> settimezone (New DateTimezone ( "아시아/상하이")); echo $ dt-> 형식 ( "ymd h : i : s"); </코드>이 방법은 명확하고 유지 관리 가능뿐만 아니라 다중 시간대 시스템으로 확장되기 편리합니다.
gmdate ()는 표준 시간을 출력하도록 설계되었으므로 date_default_timezone_set () 의 설정을 절대 고려하지 않습니다 .
서버가 해외에 배치 된 경우 기본 시간대가 원하는 것이 아닐 수 있습니다. 프로그램 입구에서 시간대를 균일하게 설정하십시오.
사용자 시간 표시와 관련하여 DateTime을 사용하고 사용자의 시간대 기본 설정을 기록해야합니다.
시간대 편차는 시스템의 로컬 타임 존 설정을 무시하기 때문에 gmdate ()를 사용하는 타임 스탬프 출력이 발생할 때 발생합니다. 현지 시간을 출력하려면 date_default_timezone_set () 과 함께 date ()를 사용하거나 DateTime 클래스를 직접 사용하여 시간대 출력을 제어하는 것이 좋습니다. GMT 시간 출력이 필요하지 않으면 대부분의 비즈니스 시나리오에서 gmdate ()를 사용하는 것이 적절하지 않습니다.
이 기사가 PHP의 시간 편차 문제를 완전히 해결하는 데 도움이되기를 바랍니다. PHP 시간 처리에 대한 자세한 내용은 다음과 같이 액세스 할 수 있습니다.
<code> https://gitbox.net/php-time handling </code>