首頁 後端開發 php教程 php取得時間(系統時間與網路時間)

php取得時間(系統時間與網路時間)

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

用php的時候可能常會用到標準時間,有兩個辦法。

第一種方法:

取得伺服器的時間

先設定php.ini中的date.timezone = PRC或直接在程式頁面加入date_default_timezone_set("PRC"); ()date(''Y-m-d H:i:s)第二種方法:取得網路時間(這裡是藉網上的,原文網址:http://justcoding.iteye.com/blog/843645 )

有一種情形是這樣子的,例如機票業務中的訂票流程,我們需要一個非常可靠的當前時間來支持,儘管大多數伺服器的時間是非常準確的,我們使用time()來獲取的時間是可靠的,但未免會有不確切的情況,也有的伺服器由於未開啟ntp(Network Time Protocol ) 來進行時間同步,再由於硬體環境等因素,導致時間五花八門,這在通常,也就差個幾分鐘、最多幾個小時的情況是無可厚非的,因為在同一個網站使用的是同一時間,可是有的時候這樣很糟糕。在internet上,有免費專門提供UTC時間校正的授時伺服器,使用NTP協議,這個可以參考前面的連結來獲取更多知識。他提供的時間誤差在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.gov/pml/div688/grp40/its.cfm ,現在我們只關心中間的部分和206.9前面的那個0,它表示伺服器的健康狀況,也反映當前的時間是否可信。

OK了,用PHP實現獲得準確的UTC時間,這個應用在對時間要求非常苛刻的場合還是很有價值的,到此,我的問題也算解決了。

知道了UTC 標準時間, 剩下的就是轉換成世界時間了,請參閱 php取得當地時間 time zone

<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 解釋:

開啟網路的 Socket 連結。

語法:

int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);
傳回值: 整數 函數種類: 網路系統

內容說明目前這個函數提供二個 Socket 資料流介面,分別為 Internet 用的 AF_INET 及 Unix 用的 AF_UNIX。在 Internet 情形下使用時,參數 hostname 及 port 分別代表網址及埠號。在 UNIX 情形可做

IPC

,hostname 參數表示到 socket 的路徑,port 配置為 0。可省略的 timeout 選項表示多久沒有連上就中斷。使用本函數之後會傳回檔案指針,供檔案函數使用,包括 fgets()、fgetss()、fputs()、fclose() 與 feof()。參數 errno 及 errstr 也是可省略的,主要當做錯誤處理使用。使用本函數,會使用擱置模式 (blocking mode) 處理,可用 set_socket_blocking() 轉換成無擱置模式。 Author:

leedaning

本文網址:http://blog.csdn.net/leedaning/article/details/48547123

以上就介紹了php取得時間(系統時間和網路時間),包括了方面的內容,希望對PHP教學有興趣的朋友有幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
PHP Warning: date() expects parameter 2 to be long, string given的解決方法 PHP Warning: date() expects parameter 2 to be long, string given的解決方法 Jun 22, 2023 pm 08:03 PM

使用PHP程式開發時,經常會碰到一些警告或錯誤的提示訊息。其中,可能出現的一個錯誤提示是:PHPWarning:date()expectsparameter2tobelong,stringgiven。這個錯誤的提示訊息意思是:函數date()的第二個參數期望是長整型(long),但是實際傳遞給它的是字串(string)。那麼,我們

如何根據當前時間戳記建立文件/資料夾並為其命名 如何根據當前時間戳記建立文件/資料夾並為其命名 Apr 27, 2023 pm 11:07 PM

如果您正在尋找根據系統時間戳記自動建立文件和資料夾並為其命名的方法,那麼您來對地方了。有一個超級簡單的方法可以用來完成這項任務。然後,建立的資料夾或檔案可用於各種目的,例如儲存檔案備份、根據日期對檔案進行排序等。在本文中,我們將透過一些非常簡單的步驟來解釋如何在Windows11/10中自動建立檔案和資料夾,並根據系統的時間戳記對其進行命名。使用的方法是批次腳本,非常簡單。希望你喜歡閱讀這篇文章。第1節:如何根據系統目前時間戳記自動建立資料夾並命名第1步:首先,導覽至要在其中建立資料夾的父資料夾,

如何使用Date類別的getTime()方法取得日期的毫秒錶示形式 如何使用Date類別的getTime()方法取得日期的毫秒錶示形式 Jul 24, 2023 am 11:42 AM

如何使用Date類別的getTime()方法取得日期的毫秒錶示形式在Java中,Date類別是用來表示日期和時間的類別。它提供了許多有用的方法來操作和獲取日期物件的資訊。其中,getTime()方法是Date類別中的重要方法,它可以傳回日期物件的毫秒錶示形式。接下來,我們將詳細介紹如何使用此方法來取得日期的毫秒錶示形式,並提供對應的程式碼範例。使用Date類別的g

time包的單調時鐘處理 time包的單調時鐘處理 Aug 04, 2023 pm 05:45 PM

我們今天主要是來看看golang time 套件的時間應用方式。兩者的一般規則是“wall time”用於告知時間,而“monotonic clock”用於測量時間;除外還有其他的時鐘處理方式。

Java中使用Date和SimpleDateFormat類別來處理時間的方法及用法介紹 Java中使用Date和SimpleDateFormat類別來處理時間的方法及用法介紹 Apr 21, 2023 pm 03:01 PM

一.介紹java.util套件中的Date類別表示特定的時間,精確到毫秒。如果要想使用我們的Date類,那麼我們必須得引入我們的Date類。 Date類別直接寫入年份是無法得到正確的結果的。因為java中Date是從1900年開始算的,所以前面的第一個參數只要填入從1900年後過了多少年就是你想要得到的年份。月需要減1,日可以直接插入。這種方法用的比較少,常用的是第二種方法。這種方法是將一個符合特定格式,例如yyyy-MM-dd,的字串轉換成為Date類型的資料。首先,定義一個Date類型的物件Date

PHP explode函數使用方法與報錯解決 PHP explode函數使用方法與報錯解決 Mar 10, 2024 am 09:18 AM

PHP中的explode函數是用來將字串分割成陣列的函數,它非常常用且靈活。在使用explode函數的過程中,常常會遇到一些報錯和問題,本文將介紹explode函數的基本用法並提供一些解決報錯的方法。一、explode函數基本用法在PHP中,explode函數的基本語法如下:explode(string$separator,string$stri

Python中的日曆庫和日期庫有哪些選擇? Python中的日曆庫和日期庫有哪些選擇? Oct 21, 2023 am 09:22 AM

Python中有許多優秀的日曆庫和日期庫供我們使用,這些庫可以幫助我們處理日期和日曆相關的操作。接下來,我將為大家介紹幾個常用的選擇,並提供對應的程式碼範例。 datetime庫:datetime是Python內建的日期和時間處理模組,提供了許多日期和時間相關的類別和方法,可以用於處理日期、時間、時間差等操作。範例程式碼:importdatetime#取得當

PHP中使用explode函數時常見的錯誤及解決方案 PHP中使用explode函數時常見的錯誤及解決方案 Mar 11, 2024 am 08:33 AM

標題:PHP中使用explode函數時常見的錯誤及解在PHP中,explode函數是用來將字串分割成陣列的常用函數。然而,由於使用不當或資料格式不正確,可能會導致一些常見的錯誤。本文將針對使用explode函數時可能遇到的問題進行分析,並提供解決方案和具體的程式碼範例。錯誤一:未傳入分隔符號參數在使用explode函數時,最常見的錯誤之一是未傳入分隔

See all articles