PHPプログラミングでは、現在の時間または操作タイムスタンプを取得する必要性が発生することがよくあります。 GetTimeOfday()関数は、PHPに組み込まれた非常に有用な時間関数です。現在の時間情報を含む連想配列を返します。この配列には、マイクロ秒レベルで時間情報が含まれていますが、UNIXタイムスタンプを直接返すことはありません。 Timestamp形式に変換する場合は、まだ処理が必要です。この記事では、GetTimeOfday()によって返された配列をUNIXタイムスタンプに変換する方法を共有します。
まず、 GetTimeOfday()によって返された配列の構造を理解しましょう。この関数は、次の構造で連想配列を返します。
<span><span><span class="hljs-keyword">array</span></span><span>(
</span><span><span class="hljs-string">"sec"</span></span><span> => 現在の時刻の秒数, </span><span><span class="hljs-comment">// から1970年1月1日々秒数</span></span><span>
</span><span><span class="hljs-string">"usec"</span></span><span> => マイクロ秒パート, </span><span><span class="hljs-comment">// 微秒数,范围から0到着999999</span></span><span>
</span><span><span class="hljs-string">"minuteswest"</span></span><span> => ローカルタイムゾーン偏差, </span><span><span class="hljs-comment">// オプション</span></span><span>
</span><span><span class="hljs-string">"dsttime"</span></span><span> => 夏時間の兆候, </span><span><span class="hljs-comment">// オプション</span></span><span>
)
</span></span>
SECは、1970年1月1日から現在までの秒数を表し、 USECはマイクロ秒部品を表します。これらの2つの部分をタイムスタンプに統合します。これは通常、 SECを秒に変換してから1,000,000(つまり、マイクロ秒の秒に変換する方法)を除算することで取得できます。
GetTimeOfday()によって返された配列をUNIXタイムスタンプに変換するためのPHPサンプルコードを次に示します。
<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">$time_info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">gettimeofday</span></span><span>();
</span><span><span class="hljs-comment">// タイムスタンプを計算します</span></span><span>
</span><span><span class="hljs-variable">$timestamp</span></span><span> = </span><span><span class="hljs-variable">$time_info</span></span><span>[</span><span><span class="hljs-string">'sec'</span></span><span>] + (</span><span><span class="hljs-variable">$time_info</span></span><span>[</span><span><span class="hljs-string">'usec'</span></span><span>] / </span><span><span class="hljs-number">1000000</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-string">"現在のタイムスタンプ: "</span></span><span> . </span><span><span class="hljs-variable">$timestamp</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
上記のコードで:
$ time_info ['sec']は現在の秒数を取得します。
$ time_info ['usec']は、現在のマイクロ秒数を取得します。
マイクロ秒数を1,000,000に分割することで、2番目の部分の部分に変換し、フローティングUnixタイムスタンプになります。
時間の精度:
マイクロ秒レベルでの時間が含まれているため、返されたタイムスタンプは、秒とマイクロ秒の組み合わせを表すフローティング番号です。たとえば、ラウンド()関数を使用して結果を丸めるなど、実際のニーズに応じて小数点以下の場所の数を保持できます。
タイムゾーンと夏時間:
getTimeOfDay()関数は、サーバーの現地時間に基づいて結果を返します。タイムゾーンの偏差や夏時間の問題に対処する必要がある場合は、 date_default_timezone_set()などの他の関数を組み合わせてタイムゾーンを設定したり、タイムオブジェクトをより正確に処理する必要があります。
パフォーマンス:
マイクロ秒レベルのタイムスタンプは、特にタイムスタンプの比較やロギングを行う場合、一部の高性能アプリケーションにとって非常に重要です。マイクロ秒の精度が必要ない場合は、2番目のレベルでUNIXタイムスタンプを直接返すTime()関数を使用することを検討してください。
getTimeOfday()から得られた時間情報には、より洗練された時間の粒度が含まれており、高精度の時間操作が必要なシナリオに適しています。返された結果は、単純な数学操作を備えた配列ですが、Unixタイムスタンプに簡単に変換できます。このスキルを習得すると、PHPでより効率的に時間関連機能を処理できます。