php获取时间(系统时间和网络时间)
用php的時候可能經常會用到標準時間,有兩個辦法。
第一種方法:
獲取服務器的時間
首先配置php.ini中的date.timezone = PRC或者直接在程序頁面加入date_default_timezone_set("PRC"); 然后就可以使用time()或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端口就可以了。
$fp=fsockopen('time.nist.gov',13,$errno,$errstr,90); echo fread($fp,2010);獲得到的數據類似于這樣的:
55545 10-12-15 21:40:47 00 0 0 113.1 UTC(NIST) *這個串的每個部分都有意義,具體的請參看:http://www.nist.gov/pml/div688/grp40/its.cfm ,現在我們只關心中間的部分和206.9前面的那個0,它表示服務器的健康狀況,也反映當前的時間是否可信。
OK了,用PHP實現獲得準確的UTC時間,這個應用在對時間要求非常苛刻的場合還是很有價值的,到此,我的問題也算解決了。
知道了UTC 標準時間, 剩下的就是轉換成世界時間了,參看 php獲取當地時間 time zone
$fp=fsockopen('time.nist.gov',13,$errno,$errstr,90); $ufc = explode(' ',fread($fp,date('Y'))); $date = explode('-',$ufc[1]); $processdate = $date[1].'-'.$date[2].'-'. date('Y').' '.$ufc[2]; switch($ufc[5]) { case 0: echo '精確'; break; case 1: echo '誤差:0-5s'; break; case 2: echo '誤差: > 5s'; break; default: echo '硬件出錯!'; break; } echo gmttolocal($processdate,8); // 中國 function gmttolocal($mydate,$mydifference) { $datetime = explode(" ",$mydate); $dateexplode = explode("-",$datetime[0]); $timeexplode = explode(":",$datetime[1]); $unixdatetime = mktime($timeexplode[0]+$mydifference,$timeexplode[1],0,$dateexplode[0],$dateexplode[1],$dateexplode[2]); return date("m/d/Y H:i:s",$unixdatetime); }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获取时间(系统时间和网络时间)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [css] 说说你对字母“X“在CSS
- 下一篇: PHP同步淘宝客订单数据