日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php获取时间(系统时间和网络时间)

發布時間:2023/12/9 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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获取时间(系统时间和网络时间)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。