PHP를 사용할 때 표준시를 사용하는 경우가 많습니다. 2가지 방법이 있습니다.
첫 번째 방법:
서버 시간 가져오기
먼저 php.ini에서 date.timezone = PRC
를 구성하거나 date_default_timezone_set("PRC");
을 프로그램 페이지에 직접 추가한 다음 사용할 수 있습니다. 그것 time()
또는 date(''Y-m-d H:i:s)
두 번째 방법: 네트워크 시간 가져오기(인터넷에서 빌려온 것입니다. 원래 주소: http://justcoding.iteye.com/blog/843645)
항공권 사업의 예약 프로세스와 같은 상황이 있습니다. 이를 지원하려면 매우 신뢰할 수 있는 현재 시간이 필요합니다. 일부 서버에서는 시간 동기화를 위한 ntp(Network Time Protocol)가 활성화되어 있지 않으며 하드웨어 환경 등의 요인으로 인해 시간이 몇 분 정도 차이가 날 수 있습니다. , 같은 웹사이트에서 같은 시간을 사용하기 때문에 상황이 최대 몇 시간인 것은 이해할 수 있지만 때로는 이것이 나쁩니다. 인터넷에는 NTP 프로토콜을 사용하여 UTC 시간 수정을 특별히 제공하는 무료 타이밍 서버가 있습니다. 자세한 내용은 이전 링크를 참조하세요. 그가 제공하는 시간 오류는 약 20ms입니다(데이터 전송 중에 소비되는 시간은 말할 것도 없고 NTP는 오랫동안 이를 고려했습니다). 따라서 이 타이밍 서버를 통해 우리는 매우 안정적인 현재 시간을 얻을 수 있습니다.
이제 PHP를 사용하여 매우 정확한 UTC 시간을 얻는 방법을 살펴보겠습니다. NTP 프로토콜은 사용하기가 약간 어렵기 때문에 더 나은 프로토콜인 Daytime Protocol을 사용합니다. 이 프로토콜을 통해 텍스트 데이터를 직접 얻을 수 있어 처리가 더욱 편리해집니다. 우리는 time.nist.gov의 시간 서비스를 사용합니다. 코드는 매우 간단합니다. TCP를 사용하여 포트 13에 연결하면 됩니다.
<code><span>$fp</span>=fsockopen(<span>'time.nist.gov'</span>,<span>13</span>,<span>$errno</span>,<span>$errstr</span>,<span>90</span>); <span>echo</span> fread(<span>$fp</span>,<span>2010</span>); </code>
얻은 데이터는 다음과 유사합니다.
<code>55545 10<span>-12-15</span> 21<span>:40</span><span>:47</span> 00 0 0 113<span>.1</span><span>UTC</span>(<span>NIST</span>) * </code>
이 문자열의 모든 부분은 의미가 있습니다. 자세한 내용은 http://www.nist를 참조하세요. pml/div688/grp40/its.cfm에서 이제 중간 부분과 206.9 앞의 0만 고려합니다. 이는 서버의 상태를 나타내며 현재 시간을 신뢰할 수 있는지 여부도 반영합니다.
알겠습니다. 정확한 UTC 시간을 얻으려면 PHP를 사용하세요. 이 애플리케이션은 시간 요구 사항이 매우 엄격한 상황에서도 매우 유용합니다. 이제 문제가 해결되었습니다.
UTC 표준시를 알고 나면 남은 것은 세계 시간으로 변환하는 것뿐입니다. PHP를 참조하여 현지 시간대를 알아보세요
<code><span>$fp</span>=fsockopen(<span>'time.nist.gov'</span>,<span>13</span>,<span>$errno</span>,<span>$errstr</span>,<span>90</span>); <span>$ufc</span> = explode(<span>' '</span>,fread(<span>$fp</span>,date(<span>'Y'</span>))); <span>$date</span> = explode(<span>'-'</span>,<span>$ufc</span>[<span>1</span>]); <span>$processdate</span> = <span>$date</span>[<span>1</span>].<span>'-'</span>.<span>$date</span>[<span>2</span>].<span>'-'</span>. date(<span>'Y'</span>).<span>' '</span>.<span>$ufc</span>[<span>2</span>]; <span>switch</span>(<span>$ufc</span>[<span>5</span>]) { <span>case</span><span>0</span>: <span>echo</span><span>'精确'</span>; <span>break</span>; <span>case</span><span>1</span>: <span>echo</span><span>'误差:0-5s'</span>; <span>break</span>; <span>case</span><span>2</span>: <span>echo</span><span>'误差: > 5s'</span>; <span>break</span>; <span>default</span>: <span>echo</span><span>'硬件出错!'</span>; <span>break</span>; } <span>echo</span> gmttolocal(<span>$processdate</span>,<span>8</span>); <span>// 中国 </span><span><span>function</span><span>gmttolocal</span><span>(<span>$mydate</span>,<span>$mydifference</span>)</span>{</span><span>$datetime</span> = explode(<span>" "</span>,<span>$mydate</span>); <span>$dateexplode</span> = explode(<span>"-"</span>,<span>$datetime</span>[<span>0</span>]); <span>$timeexplode</span> = explode(<span>":"</span>,<span>$datetime</span>[<span>1</span>]); <span>$unixdatetime</span> = mktime(<span>$timeexplode</span>[<span>0</span>]+<span>$mydifference</span>,<span>$timeexplode</span>[<span>1</span>],<span>0</span>,<span>$dateexplode</span>[<span>0</span>],<span>$dateexplode</span>[<span>1</span>],<span>$dateexplode</span>[<span>2</span>]); <span>return</span> date(<span>"m/d/Y H:i:s"</span>,<span>$unixdatetime</span>); } </code>
fsockopen 설명:
네트워크 소켓 링크를 엽니다.
구문: int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);
반환 값: 정수
기능 유형: 네트워크 시스템
내용 설명 현재 이 기능은 두 개의 소켓 데이터 흐름 인터페이스, 즉 인터넷용 AF_INET과 Unix용 AF_UNIX를 제공합니다. 인터넷 환경에서 사용될 때 매개변수 호스트 이름과 포트는 각각 URL과 포트 번호를 나타냅니다. UNIX에서는 IPC를 수행할 수 있으며, 호스트 이름 매개변수는 소켓에 대한 경로를 나타내며 포트는 0으로 구성됩니다. 생략된 시간 초과 옵션은 연결이 중단되기까지 걸리는 시간을 나타냅니다. 이 함수를 사용한 후에는 fgets(), fgetss(), fputs(), fclose() 및 feof()를 포함한 파일 함수에서 사용할 수 있도록 파일 포인터가 반환됩니다. errno 및 errstr 매개변수도 생략되었으며 주로 오류 처리에 사용됩니다. 이 함수를 사용하면 set_socket_blocking()을 사용하여 비차단 모드로 변환할 수 있는 차단 모드 처리를 사용하게 됩니다.
작성자: leedaning
이 글의 URL: http://blog.csdn.net/leedaning/article/details/48547123
위에는 관련 내용을 포함하여 PHP 취득 시간(시스템 시간, 네트워크 시간)을 소개하고 있으니, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.