PHP의 기본 시간대 설정은 일반적으로 UTC입니다. 이 시간대는 글로벌 시간 표준화를 지원하도록 설정되었지만 많은 응용 프로그램, 특히 기본 시간대로 UTC를 사용하는 특정 지역의 사용자를 대상으로하는 응용 프로그램의 경우 적절하지 않을 수 있습니다. 예를 들어, 중국에서 응용 프로그램을 개발하지만 (UTC+8) 서버가 UTC로 설정된 경우 디스플레이 시간에 오류가 발생합니다.
일반적으로 PHP는 날짜 () 함수를 사용하여 출력 시간을 사용합니다. 시간대가 잘못 설정되면 표시된 시간은 예상대로되지 않습니다.
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span></span>시간대가 올바르게 설정되지 않으면이 출력은 예상대로 아닐 수 있습니다.
INI_SET () 는 PHP에서 매우 실용적인 기능으로 PHP 구성 항목의 동적 수정을 허용합니다. 프로그램이 실행될 때 INI_SET ()를 사용하여 시간대를 설정하여 PHP가 지정한 시간대에 따라 시간을 출력 할 수 있습니다.
<span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'date.timezone'</span></span><span>, </span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span></span>date.timezone은 시간대를 정의하는 PHP 구성 파일의 지침입니다. INI_SET () 을 통해 시간대를 수정 한 후 PHP는 현재 스크립트에서 지정된 시간대에 따라 시간을 표시합니다.
아시아/상하이 (중국 표준시)
America/New_york (미국 뉴욕 시간대)
유럽/런던 (런던 시간)
아시아/도쿄 (도쿄 시간)
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 시간대를 상하이로 설정하십시오</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'date.timezone'</span></span><span>, </span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span><span><span class="hljs-comment">// 출력 현재 시간</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>위의 코드는 상하이 시간대에 따라 현재 시간을 표시합니다.
date_default_timezone_get () 함수를 사용하여 현재 PHP 구성 시간대를 볼 수 있습니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">date_default_timezone_get</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>PHP 구성이 시간대를 명시 적으로 설정하지 않으면 기본 반환 시간대는 일반적으로 UTC입니다.
때때로, 시간대를 설정하기 위해 ini_set ()를 사용하면 기본 시간대가 php.ini 에서 설정되었고 일부 환경에서는 덮어 쓰일 수 없기 때문에 아무런 영향을 미치지 않는 것 같습니다. 시간대 설정이 적용되도록하기 위해 다음 방법을 시도 할 수 있습니다.
timezone 이 php.ini 로 설정되지 않은지 확인하십시오.
PHP 오류 로그를 확인하여 관련 경고 또는 오류 메시지가 있는지 확인하십시오.
응용 프로그램에 여러 시간 영역이있는 사용자가 포함 된 경우 DateTime 클래스 및 DateTimezone 클래스를 사용하여 다른 시간 영역에서 시간을 처리하는 것을 고려할 수 있습니다. 이것은 단순히 date () 함수를 사용하는 것보다 유연합니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// a DateTime 물체</span></span><span>
</span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTime</span></span><span>(</span><span><span class="hljs-string">'now'</span></span><span>, </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTimeZone</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>));
</span><span><span class="hljs-comment">// 상하이 시간 수출</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$date</span></span><span>-></span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>PHP 프로그램이 정확한 시간을 표시하도록하려면 올바른 시간대를 설정하는 것이 필수적입니다. ini_set () 함수를 사용하면 런타임에서 시간대를 쉽게 설정할 수 있습니다. 특히 크로스 타임 존 사용자와 관련하여 시간대를 합리적으로 설정하면 시간 오류를 피하고 사용자가 보는 시간이 항상 정확한지 확인할 수 있습니다.
ini_set ()을 사용하여 시간대를 설정하는 작업은 매우 간단하지만 시간대 설정이 덮어 쓰지 않도록 PHP 구성의 다른 설정에주의를 기울여야합니다. 응용 프로그램에 여러 시간 영역을 처리하는 경우 DateTime 클래스를 사용하여 시간을보다 유연하게 처리하십시오.