ホームページ > バックエンド開発 > PHPチュートリアル > php は時刻を取得します (システム時刻とネットワーク時刻)

php は時刻を取得します (システム時刻とネットワーク時刻)

WBOY
リリース: 2016-07-29 09:15:00
オリジナル
2203 人が閲覧しました

phpを使用する場合、標準時間を使用することがよくあります。2つの方法があります。

最初の方法:

サーバー時刻を取得します

最初に php.ini で date.timezone = PRC或者直接在程序页面加入date_default_timezone_set("PRC"); 然后就可以使用time()date(''Y-m-d H:i:s)

を設定します 2 番目の方法: ネットワーク時刻を取得します (ここではインターネットから借用した、元のアドレス: http://justcoding.iteye )。 com/blog/843645)

航空券ビジネスの予約プロセスなど、このような状況があります。サポートするには非常に信頼できる現在時刻が必要です。ただし、ほとんどのサーバーの時刻は非常に正確ですが、当社では時刻を使用しています。 time() によって取得される時刻は信頼性がありますが、不正確である可能性があります。一部のサーバーでは時刻同期に ntp (Network Time Protocol) が有効になっておらず、ハードウェア環境などの要因により、時刻が異なる場合があります。同じ Web サイトで同じ時刻が使用されているため、数分、最大でも数時間の違いは問題ありませんが、場合によってはこれが問題となることがあります。インターネット上には、NTP プロトコルを使用して UTC 時刻修正を提供する無料のタイミング サーバーがあります。詳細については、前のリンクを参照してください。彼が提供する時刻誤差は約 20 ミリ秒です (データ送信プロセス中に消費される時間は言うまでもありませんが、NTP は長い間これを考慮していました)。そのため、このタイミング サーバーを通じて、非常に信頼性の高い現在時刻を取得できます。

ここで、PHP を使用して非常に正確な UTC 時刻を取得する方法を見てみましょう。NTP プロトコルは使用するのが少し難しいため、より優れたプロトコルであるデイタイム プロトコルを使用できます。テキスト データを直接取得すると、処理が容易になります。 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.gov/pml/div688/grp40/its.cfm を参照してください。中央の部分と 206.9 の前の 0 のみに注意してください。これはサーバーの正常性状態を表し、現在の時刻が信頼できるかどうかも反映します。

OK、PHP を使用して正確な UTC 時間を取得します。このアプリケーションは、時間要件が非常に厳しい状況では依然として非常に価値があります。この時点で、私の問題は解決されました。

UTC標準時間がわかったので、あとはそれを世界時間に変換するだけです

<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]);
戻り値: 整数
関数の種類: ネットワーク システム

コンテンツの説明 現在、この関数は 2 つのソケット データ フロー インターフェイス、つまりインターネット用の AF_INET と Unix 用の AF_UNIX を提供します。インターネットのコンテキストで使用される場合、パラメーター hostname と port はそれぞれ 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 チュートリアルに興味のある友人の参考になれば幸いです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート