현재 위치: > 최신 기사 목록> API 요청 시간이 균일하지 않습니까? Timezone_open을 사용하여 요청에 대한 자동 시간대 적응을 구현하도록 가르치십시오.

API 요청 시간이 균일하지 않습니까? Timezone_open을 사용하여 요청에 대한 자동 시간대 적응을 구현하도록 가르치십시오.

M66 2025-08-05

글로벌 응용 프로그램을 개발할 때 일반적이고 어려운 문제는 다음과 같습니다. 다른 시간 영역의 사용자가 API 요청을 시작하면 서버가 고정 시간대 (예 : UTC 또는 서버 로컬 타임)를 사용하는 경우 종종 시간 편차로 이어지고 논리적 오류를 유발합니다. 예를 들어, 사용자 약속 시간, 주문 생성 시간 또는 통계 보고서 시간 등은 모두 잘못 정렬 될 수 있습니다.

이 문제를 해결하기 위해 PHP에서 Timezone_open 및 관련 시간대 기능을 사용하여 요청 수준에서 자동 시간대 적응을 구현할 수 있습니다. 이러한 방식으로, 사용자가 어떤 국가 또는 지역에서 나오든 서버는 사용자가 지정한 시간대 매개 변수에 따라 시간 데이터를 정확하게 처리 할 수 있습니다.

UTC를 사용할 수없는 이유는 무엇입니까?

많은 개발자들은 데이터베이스 스토리지 및 데이터 동기화의 관점에서 좋은 생각입니다. UTC는 가장 안전한 선택입니다. 그러나 문제는 사용자가 보는 시간이 UTC가 아니라 현지 시간이라는 것입니다.

예를 들어 : 베이징 시간 오후 3시에 주문하십시오. 서버가 UTC 시간 (즉, 오전 7시)를 기록하고 사용자가 주문 레코드를 열고 "오전 7시에 주문을하는"것을 본다면, 이는 분명히 혼란과 불만을 일으킬 것입니다.

Timezone_open의 역할

Timezone_open ()은 Datetimezone 객체를 생성하는 PHP의 함수입니다. 그 힘은 시간대 영역 식별자 ( 아시아/상하이 , 미국/뉴 _york 등)를 통과시켜 정확한 시간대 객체를 구축 할 수 있다는 것입니다. 이 객체는 DateTime 에서 사용할 수 있으므로 타겟팅 된 시간 조정을 가능하게합니다.

기본 사용 :

 <span><span><span class="hljs-variable">$tz</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</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-variable">$tz</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$date</span></span><span>-&gt;</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>

출력은 서버의 기본 시간대가 아닌 현재 상하이 시간입니다.

API 요청에 적용하십시오

인터페이스 /API /Create-Event 가 있고 사용자가 요청을 보낼 때 타임 스탬프와 시간대 식별자를 전달한다고 가정합니다.

 <span><span><span class="hljs-punctuation">{</span></span><span>
  </span><span><span class="hljs-attr">"event_time"</span></span><span><span class="hljs-punctuation">:</span></span><span> </span><span><span class="hljs-string">"2025-06-22 15:00:00"</span></span><span><span class="hljs-punctuation">,</span></span><span>
  </span><span><span class="hljs-attr">"timezone"</span></span><span><span class="hljs-punctuation">:</span></span><span> </span><span><span class="hljs-string">"America/New_York"</span></span><span>
</span><span><span class="hljs-punctuation">}</span></span><span>
</span></span>

서버에서 이와 같이 처리 할 수 있습니다.

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">parseClientTime</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$timeStr</span></span></span><span>, </span><span><span class="hljs-variable">$timezoneStr</span></span><span>) {
    </span><span><span class="hljs-keyword">try</span></span><span> {
        </span><span><span class="hljs-variable">$tz</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-variable">$timezoneStr</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-variable">$timeStr</span></span><span>, </span><span><span class="hljs-variable">$tz</span></span><span>);
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$date</span></span><span>;
    } </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
        </span><span><span class="hljs-comment">// 기본 fallback 도착하다 UTC</span></span><span>
        </span><span><span class="hljs-keyword">return</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-variable">$timeStr</span></span><span>, </span><span><span class="hljs-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-string">'UTC'</span></span><span>));
    }
}

</span><span><span class="hljs-comment">// 예제 사용</span></span><span>
</span><span><span class="hljs-variable">$clientTime</span></span><span> = </span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'event_time'</span></span><span>] ?? </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-variable">$clientTimezone</span></span><span> = </span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'timezone'</span></span><span>] ?? </span><span><span class="hljs-string">'UTC'</span></span><span>;

</span><span><span class="hljs-variable">$eventDate</span></span><span> = </span><span><span class="hljs-title function_ invoke__">parseClientTime</span></span><span>(</span><span><span class="hljs-variable">$clientTime</span></span><span>, </span><span><span class="hljs-variable">$clientTimezone</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"서버 레코드의 통일 UTC 시간입니다: "</span></span><span> . </span><span><span class="hljs-variable">$eventDate</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">setTimezone</span></span><span>(</span><span><span class="hljs-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-string">'UTC'</span></span><span>))-&gt;</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>

이 처리 후 서버는 사용자가 입력하는 시간 영역을 수행 할 수 있습니다.

  1. 사용자가 제출 한 "현지 시간"을 올바르게 구문 분석합니다.

  2. 통합 UTC로 변환하여 데이터베이스에 저장하십시오.

  3. 데이터를 반환 할 때는 사용자 시간 영역에 따라 데이터가 동적으로 형식화됩니다.

제안 : 프론트 엔드는 오프셋 대신 시간대 식별자를 통과합니다.

일부 개발자는 GMT 오프셋 (예 : +0800 )을 프론트 엔드로 직접 전송하는 경향이 있지만 일광 절약 시간을 다룰 때 오류가 발생하기 쉽습니다. 유럽/런던 과 같은 프론트 엔드에서 표준 시간대 식별자를 통과하는 것이 좋습니다.이를 통해 PHP는 일광 절약 시간 전환과 같은 복잡한 문제를 자동으로 처리 할 수 있습니다.

요약

Timezone_open 은 시간대 차이를 다루는 강력한 도구입니다. 이를 통해 PHP 프로그램은 다음과 같습니다.

  • 사용자 현지 시간을 정확하게 분석합니다.

  • 내부 시간 처리 로직을 통합하십시오.

  • 사용자 경험을 향상시키고 시간 장애를 피하십시오.

글로벌 사용자를 지원하는 API를 개발할 때 시간대는 세부 사항이 아니라 기초입니다. 다음에 "시간이 일치하지 않음"문제를 디버깅 할 때 잊지 마십시오 : Timezone_open ()은 머리카락을 많이 잃을 수 있습니다.

  • 관련 태그:

    API