PHP에서 처리 날짜 및 시간의 정확성은 대부분의 응용 프로그램에 중요합니다. 특히 여러 서버 환경과 사용자가 여러 시간 영역에 배포되는 경우 시간 영역을 균일하고 정확하게 설정하고 관리하는 방법은 개발자가 마스터 해야하는 기본 기술이되었습니다. date_default_timezone_set () 및 ini_set () 은 시간 영역을 설정하는 두 가지 일반적인 방법입니다. 각각 적용 가능한 시나리오가 있지만 경우에 따라 최상의 결과를 얻을 수 있습니다.
PHP는 시간대를 설정하는 다음과 같은 방법을 제공합니다.
php.ini 구성 파일 설정
<span><span><span class="hljs-attr">date.timezone</span></span><span> = </span><span><span class="hljs-string">"Asia/Shanghai"</span></span><span>
</span></span>이것은 설정하는 가장 기본적인 방법이며 서버가 시작될 때로드되고 전역 통합 구성에 적합합니다.
INI_SET 기능 런타임 설정
<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>INI_SET는 스크립트가 실행될 때 DATE.TIMEZONE을 포함하여 구성 항목을 동적으로 설정할 수 있습니다.
date_default_timezone_set 함수 런타임 설정
<span><span><span class="hljs-title function_ invoke__">date_default_timezone_set</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span></span>이것은 공식 권장 설정 방법으로보다 직관적이고 의미 적입니다.
둘 다 시간대를 설정할 수 있지만 행동에는 몇 가지 주요 차이점이 있습니다.
INI_SET는 실제로 PHP의 런타임 구성 항목을 수정하여 date_default_timezone_get () 의 반환 값에 영향을 미칩니다.
DATE_DEFAULT_TIMEZONE_SET PHP의 내부 시간대 환경을 직접 설정하고 날짜 () , DateTime 및 기타 기능을 사용하는 모든 동작에 즉시 적용됩니다.
일부 호스트 환경은 통화 권한을 INI_SET 으로 제한 할 수 있으며 date_default_timezone_set은 일반적으로 사용할 수 있습니다.
다른 환경에서 시간대 설정의 안정성과 호환성을 보장하기 위해 다음 조합 방법을 권장합니다.
<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-title function_ invoke__">date_default_timezone_set</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span></span>왜 둘 다 설정합니까?
더 나은 호환성 : 일부 라이브러리는 여전히 특정 이전 버전의 PHP 또는 특정 구성에서 INI 구성을 읽습니다.
명확한 의도 : INI_SET가 비활성화 되더라도 Date_Default_Timezone_Set은 스크립트가 올바르게 작동하도록 할 수 있습니다.
디버깅이 더 편리합니다 . phpinfo () 에 표시된 시간대가 혼동을 피하기 위해 로그와 일치하는지 확인하십시오.
통일 입구에서 시간대를 설정하십시오 <br> 모든 스크립트 ( index.php )의 입력 파일 또는 프레임 워크의 시작 파일에 시간대를 설정하여 글로벌 일관성을 보장합니다.
여러 곳에서 반복적 인 설정을 피하십시오 <br> 실제로 덮어 쓰기와 혼란을 방지 할 필요가없는 한 시간 영역을 여러 파일로 반복적으로 설정하는 것이 좋습니다.
사용자의 시간대를 동적으로 조정하십시오 (선택 사항)
국제 애플리케이션의 경우 date_default_timezone_set은 글로벌 구성에 의존하는 대신 사용자 설정을 기반으로 동적으로 호출 할 수 있습니다.
UTC 스토리지를 사용하고 <br>을 표시 할 때 변환하십시오 UTC를 사용하여 데이터베이스에 시간을 균일하게 저장 한 다음 사용자의 시간대 변환에 따라 표시하고 DateTimezone 과 함께 사용하는 것이 좋습니다.
ini_set ( 'date.timezone', 'xxx') 및 date_default_timezone_set ( 'xxx')을 동시에 사용하면 다른 환경과의 호환성을 최대화하고 응용 프로그램의 시간 논리가 정확한지 확인할 수 있습니다. 이 "이중 보험"전략은 간단하고 효과적이며 일일 개발에서 권장되는 시간대 설정 방법입니다. 시간 처리는 작지 않습니다. 혼란스러운 시간대 설정은 데이터 오류, 로그 혼동 및 작업 계획의 실패와 같은 일련의 문제로 이어질 수 있습니다. 모든 PHP 개발자에게 주목할 가치가 있습니다.