`
天梯梦
  • 浏览: 13747210 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

php获得可靠的精准的当前时间 ( 通过授时服务器 )

阅读更多

关联:php获取当地时间 time zone

有一种情形是这样子的,比如机票业务中的订票流程,我们需要一个非常可靠的当前时间来支持,尽管大多数服务器的时间是非常准确的,我们使用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() 转换成无搁置模式。

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    易语言连接授时服务器

    5. **调整本地时间**:解析得到服务器时间后,与本地时间进行比较,如果存在偏差,则调整本地系统时间,使其与授时服务器保持一致。 6. **错误处理**:在上述过程中,可能遇到网络连接问题、数据包解析错误等,需要...

    自动获取国家授时中心服务器时间,并修改系统时间。自动同步时间!

    标题中的“自动获取国家授时中心服务器时间,并修改系统时间。自动同步时间!”表明这是一个程序,其功能是连接到国家授时中心的服务器,获取最准确的时间信息,并将用户的计算机系统时间同步到这个标准时间。这样的...

    NTP网络授时系统设计与实现——NTP服务器端授时服务软件设计与实现参考.pdf

    NTP 网络授时系统设计与实现 - NTP 服务器端授时服务软件设计与实现参考 本资源摘要信息主要介绍 NTP 网络授时系统设计与实现中的 NTP 服务器端授时服务软件设计与实现相关知识点。该系统主要包括三个功能模块:...

    获取NTP服务器授时中心时间源代码

    获取NTP服务器授时中心时间源代码。 可以通过阿里云NTP服务器来获得时间,比较稳定。 ntp1.aliyun.com ntp2.aliyun.com ntp3.aliyun.com ntp4.aliyun.com ntp5.aliyun.com ntp6.aliyun.com ntp7.aliyun.com

    获取网络授时服务器准确时间并设置本机 VC++6

    通过NTP,设备可以从可靠的网络时间服务器获取时间信息,确保全球范围内的设备有统一的时间参考。 在VC++6环境下,我们可以使用Windows API中的Winsock库来实现Socket通信。Winsock是Windows操作系统对Berkeley套接...

    Http协议网络对时工具,时间来源自国家授时中心

    Http协议网络对时工具,使用国家授时中心http服务器提供的标准北京时间,不受网关跨越限制,免去UDP协议对时工具无法穿越网关的烦恼。

    易语言取网络时间,标准时间,北京时间,国家授时中心时间

    首先,"取网络时间"是指从互联网上的时间服务器获取当前的国际协调时间(UTC),这是一种全球统一的时间标准。在易语言中,可以使用内置的网络函数来连接到NTP(网络时间协议)服务器,发送请求并接收包含当前时间的...

    e语言-易语言连接授时服务器

    在编程领域,授时服务器(NTP Server)是一种提供准确时间服务的服务器,通过Internet时间协议(NTP)与全球定位系统(GPS)、原子钟等高精度时间源同步,为网络中的设备提供统一的时间参考。这个项目的核心在于如何...

    一个ntp授时服务器软件

    1.NTP服务的端口是123,使用的是udp协议,所以NTP服务器的防火墙必须对外开放udp 123这个端口。 2.Ntpd启动的时候通常需要一段时间进行时间同步,所以在ntpd刚刚启动的时候还不能正常提供时钟服务,最长大概有5分钟吧...

    易语言国家授时中心标准时间

    通过学习和理解这段源码,我们可以掌握如何在易语言中处理时间戳,以及如何与国家授时中心的标准时间进行交互。 总之,易语言国家授时中心标准时间相关的编程涉及Unix时间戳的转换和处理,这对于需要精确时间的系统...

    电力系统嵌入式NTP授时服务器设计与实现.pdf

    NTP授时服务器是电力系统时间同步的关键组件。它通过网络与外部的时间源进行通信,如GPS或原子钟,获取精确的时间信息,然后将这些信息分发给系统内的各个节点,确保所有设备的时间一致。在电力系统中,这种同步对于...

    achron5授时软件(同步电脑时间)

    NTP是一种用于互联网上时钟同步的协议,通过比较和调整计算机的本地时间与远程时间服务器的时间,使计算机的时间保持精确。 3. **局域网时间同步**: 在局域网环境中,时间不一致可能导致数据冲突、日志记录混乱等...

    易语言源码易语言连接授时服务器源码.rar

    易语言源码易语言连接授时服务器源码.rar 易语言源码易语言连接授时服务器源码.rar 易语言源码易语言连接授时服务器源码.rar 易语言源码易语言连接授时服务器源码.rar 易语言源码易语言连接授时服务器源码.rar ...

    计算机时间同步PCI授时卡

    **认证与精度**:该系统已经通过中国时间授时中心的鉴定,证明其信号稳定且同步精度高,可以达到10毫秒(ms)的同步精度。这一精度对于大多数应用场景而言已经非常出色,尤其是对于那些需要高精度时间同步的应用领域来...

    MINBOX授时盒

    MINI BOX授时盒是一种新型的时间同步设备,它能够利用CDMA基站提供的精准时间信息来同步计算机时间,从而确保计算机系统时间的高度准确性与一致性。该产品主要适用于需要精确时间同步的各种应用场景,如科学研究、...

    GSM通过服务器或内部网络授时、获取网络时间并校正到STM32内部RTC中.rar

    用STM32F103单片机控制SIM900A模块通过连接国外的授时服务器或者访问SIM900A内部获取网络时间,把获得的时间设置到STM32内部的RTC中,实现单片机上电自动校正时间。时间在串口上显示出来。资源是完整的工程,里面...

    对时服务器sntp时间服务器同步时间服务器.pdf

    【对时服务器sntp时间服务器同步时间服务器】是IT领域中的关键设备,主要负责网络环境中的时间同步。这种服务器基于NTP(Network Time Protocol)和SNTP(Simple Network Time Protocol)协议,通过从GPS地球同步...

    基于STM32的SNTP授时服务器的研究与设计.zip

    它通过互联网与时间服务器进行通信,获取准确的时间信息,并将该信息传播给客户端,确保网络中的设备具有统一的时间。 STM32作为硬件基础,其强大的处理能力使得它可以处理SNTP协议的计算需求。STM32家族拥有多种...

    中科大器自动对时,使用中国的授时中心。

    授时中心通常指的是国家授时中心(NTSC),这是一个为国家提供标准时间服务的专业机构,通过精确的原子钟来保持全国的时间统一。 在描述中提到的功能,即“让你的电脑毫秒不差,自动和授时中心对时”,意味着这款...

    基于STM32的SNTP授时服务器的研究与设计.pdf

    基于STM32的SNTP授时服务器的研究与设计 本文研究了基于STM32的SNTP授时服务器的设计和实现。该系统采用STM32作为核心处理器,结合W5100芯片,实现了SNTP协议,提供了精度高达1ms的时间同步服务。该系统采用C/S模型...

Global site tag (gtag.js) - Google Analytics