PHP에서는 내장 된 기능 Timezone_identifiers_List를 통해 모든 유효한 시간대 식별자를 얻을 수 있습니다. 이 함수는 모든 시간 영역 식별자를 포함하는 배열을 반환합니다. 다음으로 DateTimezone 클래스를 사용하여 각 시간대의 UTC 오프셋을 계산할 수 있습니다. 이 기사에서는 이러한 기능을 통해 모든 시간 영역에 대한 UTC 오프셋을 얻는 방법을 자세히 설명하고 표시합니다.
먼저 모든 유효한 시간대 식별자를 가져와야합니다. timezone_identifiers_list () 함수를 사용하여 구현할 수 있습니다. 이 함수는 매개 변수를 허용하지 않으며 모든 시간 영역 식별자가 포함 된 배열을 반환합니다. 시간대 식별자를 얻는 코드는 다음과 같습니다.
<span><span><span class="hljs-variable">$timezones</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_identifiers_list</span></span><span>();
</span></span>
시간대 목록을 얻은 후이 시간대 식별자를 반복하고 각 시간대에 대한 UTC 오프셋을 계산해야합니다. 이를 위해 DateTimezone 클래스를 사용하여 시간대 객체를 생성하고 getOffset () 메소드를 사용하여 오프셋을 얻을 수 있습니다. getoffset () 메소드는 오프셋을 초 안에 반환합니다.
<span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$timezones</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$timezone</span></span><span>) {
</span><span><span class="hljs-comment">// 시간대 객체를 만듭니다</span></span><span>
</span><span><span class="hljs-variable">$tz</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-variable">$timezone</span></span><span>);
</span><span><span class="hljs-comment">// 현재 시간을 얻으십시오 UTC 오프셋(단위:두번째)</span></span><span>
</span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-variable">$tz</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getOffset</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-variable">$tz</span></span><span>));
</span><span><span class="hljs-comment">// 将오프셋转换为小时和分钟的格式</span></span><span>
</span><span><span class="hljs-variable">$offset_hours</span></span><span> = </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-number">3600</span></span><span>); </span><span><span class="hljs-comment">// 시간을 계산하십시오</span></span><span>
</span><span><span class="hljs-variable">$offset_minutes</span></span><span> = </span><span><span class="hljs-title function_ invoke__">abs</span></span><span>((</span><span><span class="hljs-variable">$offset</span></span><span> % </span><span><span class="hljs-number">3600</span></span><span>) / </span><span><span class="hljs-number">60</span></span><span>); </span><span><span class="hljs-comment">// 분 수를 계산하십시오</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">$timezone</span></span><span> . </span><span><span class="hljs-string">' UTC '</span></span><span> . (</span><span><span class="hljs-variable">$offset_hours</span></span><span> >= </span><span><span class="hljs-number">0</span></span><span> ? </span><span><span class="hljs-string">'+'</span></span><span> : </span><span><span class="hljs-string">'-'</span></span><span>) . </span><span><span class="hljs-title function_ invoke__">abs</span></span><span>(</span><span><span class="hljs-variable">$offset_hours</span></span><span>) . </span><span><span class="hljs-string">':'</span></span><span> . </span><span><span class="hljs-title function_ invoke__">str_pad</span></span><span>(</span><span><span class="hljs-variable">$offset_minutes</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'0'</span></span><span>, STR_PAD_LEFT) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>
위의 코드에서는 getoffset ()을 통해 UTC 오프셋의 초 수를 얻습니다. 오프셋을보다 친절하게 표시하려면 시간 및 분 형식으로 변환해야합니다. 오프셋의 단위는 초입니다. 3600으로 나누어서 시간을 얻을 수 있습니다. 그런 다음 나머지를 사용하여 분 수를 계산할 수 있습니다. 마지막으로 시간대와 해당 오프셋을 출력합니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 모든 시간대 식별자를 가져옵니다</span></span><span>
</span><span><span class="hljs-variable">$timezones</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_identifiers_list</span></span><span>();
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$timezones</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$timezone</span></span><span>) {
</span><span><span class="hljs-comment">// 시간대 객체를 만듭니다</span></span><span>
</span><span><span class="hljs-variable">$tz</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-variable">$timezone</span></span><span>);
</span><span><span class="hljs-comment">// 현재 시간을 얻으십시오 UTC 오프셋(단위:두번째)</span></span><span>
</span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-variable">$tz</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getOffset</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-variable">$tz</span></span><span>));
</span><span><span class="hljs-comment">// 将오프셋转换为小时和分钟的格式</span></span><span>
</span><span><span class="hljs-variable">$offset_hours</span></span><span> = </span><span><span class="hljs-title function_ invoke__">intdiv</span></span><span>(</span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-number">3600</span></span><span>); </span><span><span class="hljs-comment">// 시간을 계산하십시오</span></span><span>
</span><span><span class="hljs-variable">$offset_minutes</span></span><span> = </span><span><span class="hljs-title function_ invoke__">abs</span></span><span>((</span><span><span class="hljs-variable">$offset</span></span><span> % </span><span><span class="hljs-number">3600</span></span><span>) / </span><span><span class="hljs-number">60</span></span><span>); </span><span><span class="hljs-comment">// 분 수를 계산하십시오</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">$timezone</span></span><span> . </span><span><span class="hljs-string">' UTC '</span></span><span> . (</span><span><span class="hljs-variable">$offset_hours</span></span><span> >= </span><span><span class="hljs-number">0</span></span><span> ? </span><span><span class="hljs-string">'+'</span></span><span> : </span><span><span class="hljs-string">'-'</span></span><span>) . </span><span><span class="hljs-title function_ invoke__">abs</span></span><span>(</span><span><span class="hljs-variable">$offset_hours</span></span><span>) . </span><span><span class="hljs-string">':'</span></span><span> . </span><span><span class="hljs-title function_ invoke__">str_pad</span></span><span>(</span><span><span class="hljs-variable">$offset_minutes</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'0'</span></span><span>, STR_PAD_LEFT) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
위의 코드를 실행하면 다음 출력이 표시됩니다.
<span><span>Africa/Abidjan UTC +0:00
Africa/Accra UTC +0:00
Africa/Addis_Ababa UTC +3:00
Africa/Algiers UTC +1:00
Africa/Asmara UTC +3:00
</span><span><span class="hljs-meta prompt_">...</span></span><span>
Asia/Kolkata UTC +5:30
Asia/Kuala_Lumpur UTC +8:00
Asia/Kuwait UTC +3:00
</span><span><span class="hljs-meta prompt_">...</span></span><span>
</span></span>
각 행에는 시간대와 해당 UTC 오프셋이 표시되므로 각 시간대 간의 시간 차이를 볼 수 있습니다.
일광 절약 시간을 고려하십시오 : 특정 날짜에 시간대에 대한 오프셋을 얻으려면 새 DateTime ( "now", $ tz)을 사용하는 대신 DateTime 객체에 대한 특정 시간을 지정할 수 있습니다. 이렇게하면 일광 절약 시간 (DST)의 영향을 고려할 수 있습니다.
날짜 및 시간 처리 : getoffset () 메소드는 UTC 시간에 비해 오프셋을 반환합니다. 일반적으로 시간 차이를 판단하는 데 매우 유용하지만 날짜와 시간 변환이 관련된 경우 DateTime 객체와 더 많은 작업을 수행해야 할 수도 있습니다.
출력 형식 :이 예제의 출력 형식은 "UTC +/- Time : Minters"형식이며, 예를 들어 날짜 또는 시간대 세부 정보 추가와 같은 필요에 따라 사용자 정의 할 수 있습니다.
PHP의 Timezone_Indifiers_List 함수 및 DateTimezone 클래스를 통해 모든 시간 영역에 대한 UTC 오프셋을 쉽게 얻을 수 있습니다. 이 기능은 시간 차이를 정확하게 계산 해야하는 시간 영역 및 프로젝트의 응용 프로그램에서 매우 실용적입니다. 이 기사의 자세한 운영 안내서가 시간대에 대한 UTC 오프셋을 얻고 표시하는 방법을 더 잘 이해하는 데 도움이되기를 바랍니다.