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

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

Jul 29, 2016 am 09:15 AM
date explode fsockopen time

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 チュートリアルに興味のある友人の参考になれば幸いです。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 警告: date() はパラメータ 2 が長いことを予期しており、解決策が与えられた文字列です PHP 警告: date() はパラメータ 2 が長いことを予期しており、解決策が与えられた文字列です Jun 22, 2023 pm 08:03 PM

PHP プログラムを使用して開発する場合、警告メッセージやエラー メッセージが表示されることがよくあります。その中で、表示される可能性のあるエラー メッセージの 1 つは、PHPWarning:date()expectsparameter2tobelong,stringgiven です。エラー メッセージの意味は次のとおりです。関数 date() の 2 番目のパラメーターは長整数 (long) であることが予期されていますが、実際に渡されるのは文字列 (string) です。それで、私たちは

現在のタイムスタンプに基づいてファイル/フォルダーを作成し、名前を付ける方法 現在のタイムスタンプに基づいてファイル/フォルダーを作成し、名前を付ける方法 Apr 27, 2023 pm 11:07 PM

システムのタイムスタンプに基づいてファイルやフォルダーを自動的に作成し、名前を付ける方法を探している場合は、ここが最適な場所です。このタスクを達成するための非常に簡単な方法があります。作成されたフォルダーまたはファイルは、ファイルのバックアップの保存、日付に基づいたファイルの並べ替えなど、さまざまな目的に使用できます。この記事では、Windows 11/10 でファイルとフォルダーを自動的に作成し、システムのタイムスタンプに基づいて名前を付ける方法を、非常に簡単な手順で説明します。使用される方法はバッチ スクリプトであり、非常に簡単です。この記事を楽しんで読んでいただければ幸いです。セクション 1: システムの現在のタイムスタンプに基づいてフォルダーを自動的に作成し、名前を付ける方法 ステップ 1: まず、フォルダーを作成する親フォルダーに移動します。

Date クラスの getTime() メソッドを使用して日付のミリ秒表現を取得する方法 Date クラスの getTime() メソッドを使用して日付のミリ秒表現を取得する方法 Jul 24, 2023 am 11:42 AM

Date クラスの getTime() メソッドを使用して日付のミリ秒表現を取得する方法 Java では、Date クラスは日付と時刻を表すために使用されるクラスです。これは、日付オブジェクトに関する情報を操作および取得するための便利なメソッドを多数提供します。その中でも getTime() メソッドは Date クラスの重要なメソッドであり、日付オブジェクトのミリ秒表現を返すことができます。次に、このメソッドを使用して日付のミリ秒表現を取得する方法を詳しく説明し、対応するコード例を示します。 Date クラスの使用

タイムパッケージの単調クロック処理 タイムパッケージの単調クロック処理 Aug 04, 2023 pm 05:45 PM

今日は主に golang time パッケージの時間適用方法を見ていきます。この 2 つの間の一般的なルールは、時間を伝えるために「ウォールタイム」が使用され、時間を測定するために「モノトニッククロック」が使用されるということですが、他のクロック処理方法もあります。

Java で時刻を処理する Date クラスと SimpleDateFormat クラスを使用するメソッドと使用法の紹介 Java で時刻を処理する Date クラスと SimpleDateFormat クラスを使用するメソッドと使用法の紹介 Apr 21, 2023 pm 03:01 PM

1. はじめに java.util パッケージの Date クラスは、ミリ秒単位の正確な特定の時刻を表します。 Date クラスを使用したい場合は、Date クラスを導入する必要があります。 Date クラスに年を直接書き込んでも、正しい結果は得られません。 Java の日付は 1900 年から計算されるため、最初のパラメータに 1900 年からの年数を入力すれば、必要な年が得られます。月は 1 を引く必要がありますが、日は直接挿入できます。この方法はほとんど使用されず、2 番目の方法が一般的に使用されます。 yyyy-MM-ddなどの特定の形式に従った文字列をDate型データに変換する方法です。まず、Date型Dateのオブジェクトを定義します。

PHPのexplode関数の使い方とエラー解決方法 PHPのexplode関数の使い方とエラー解決方法 Mar 10, 2024 am 09:18 AM

PHP のexplode関数は、文字列を配列に分割するために使用される関数で、非常に一般的で柔軟性があります。分解関数を使用する過程で、エラーや問題が発生することがよくありますが、この記事では、分解関数の基本的な使用方法を紹介し、エラー報告を解決するいくつかの方法を紹介します。 1.explode関数の基本的な使い方 PHPでは、explode関数の基本的な構文は次のとおりです。explode(string$separator,string$stri

Python のカレンダーと日付のライブラリにはどのようなオプションがありますか? Python のカレンダーと日付のライブラリにはどのようなオプションがありますか? Oct 21, 2023 am 09:22 AM

Python には、使用できる優れたカレンダー ライブラリと日付ライブラリが多数あり、これらのライブラリは日付とカレンダー関連の操作を処理するのに役立ちます。次に、いくつかの一般的な選択肢を紹介し、対応するコード例を示します。 Datetime ライブラリ: datetime は、Python の組み込みの日付と時刻処理モジュールであり、日付、時刻、時差、その他の操作の処理に使用できる、日付と時刻に関連する多くのクラスとメソッドを提供します。サンプルコード: importdatetime#現在の日付を取得する

PHP で展開関数を使用する場合の一般的なエラーと解決策 PHP で展開関数を使用する場合の一般的なエラーと解決策 Mar 11, 2024 am 08:33 AM

タイトル: PHP でexplode関数を使用する際の一般的なエラーと解決策 PHPでは、explode関数は、文字列を配列に分割するために使用される一般的な関数です。ただし、不適切な使用や不正なデータ形式が原因で、いくつかの一般的なエラーが発生する可能性があります。この記事では、explode 関数の使用時に発生する可能性のある問題を分析し、解決策と具体的なコード例を示します。間違い 1: delimiter パラメーターが渡されない。explode 関数を使用するときに最もよくある間違いの 1 つは、delimiter パラメーターが渡されないことです。

See all articles