用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获取时间(系统时间和网络时间)相关推荐

  1. 时间源服务器(时间源设备)网络时间源+时钟源服务器

    时间源服务器(时间源设备)网络时间源+时钟源服务器 时间源服务器(时间源设备)网络时间源+时钟源服务器 NTP网络时间源服务器产品资料 概述 NTP网络时间源服务器是一款支持NTP和SNTP网络时间源 ...

  2. Linux设置时间、自动更新网络时间、设置时间为24小时制

    1.修改日期和时间 date -s "20201021 18:30:50" //设置日期时间 hwclock --systohc //将系统时间同步到硬件 2.同步网络时间 yum ...

  3. C#编程练习(03):北斗时间系统、GPS时间系统及其与UTC时间系统之间的转换

    需求说明:北斗周-周内秒转化为日历时,转化为UTC时,转化为GPS周周内秒 GPS周-周内秒转化为日历时,转化为UTC时,转化为北斗周-周内秒 设计示意图: 源代码: using System; us ...

  4. matlab仿真采样时间,系统中的采样时间 - MATLAB Simulink - MathWorks 中国

    纯离散系统 纯离散系统完全由离散模块组成,可以使用固定步长或可变步长求解器进行建模.要对离散系统进行仿真,需要仿真器在每个采样时间点执行一个仿真步.对于多速率离散系统 - Simulink® 以不同速 ...

  5. Linux - 查看、修改、更新系统时间(自动同步网络时间)

    本文以 CentOS 为例,演示如何查看.设置系统时间,以及自动从互联网更新系统时间. 1,查看系统时间 执行 date 命令可以查看当前系统的时间: 2,手动修改系统时间 (1)执行如下命令可以设置 ...

  6. linux 设置系统时间为当前网络时间

    一.背景 二.linux的两个时间 1. 系统时间 2. 硬件时间 3. ntpdate 一.背景 最近在学习linux 相关知识,配置了一个VMware 并安装了Centos操作系统,但是每次因为手 ...

  7. c/c++代码获取网络时间(从NTP授时服务器获取)

    有时候需要获取网络时间,又没有自己的服务器去返回,那么可以考虑从NTP授时服务器获取,windows的同步网络时间就是从NTP授时服务器获取的. NTP授时服务器协议采用UDP,端口一般为123,下面 ...

  8. Linux内核之时间系统

    Linux内核之时间系统 1.Linux时间系统 (1)CMOS时钟 (2)系统时钟 (3)节拍数(jiffies) (4)墙上时间(xtime) 2.重要数据结构 (1)struct tk_read ...

  9. gps网络对时Linux,gps网络时间对时服务器的功能简介

    gps网络时间对时服务器的功能简介 将通信局域网上各种通信设备或计算机设备的时间信息基于UCT时间偏 差限定在足够小的范围内,这种同步过程叫做网络时间同步. 有源同步和无源同步 任何时间应用系统都应该 ...

  10. Linux - 自动同步网络时间

    Linux - 查看.修改.更新系统时间 本文以 CentOS 为例,演示如何查看.设置系统时间,以及自动从互联网更新系统时间. 查看系统时间 执行 date 命令可以查看当前系统的时间: 原文:Li ...

最新文章

  1. 凯撒密码、GDP格式化输出、99乘法表
  2. python自动华 (十四)
  3. 哈佛大学通过百度搜索的数据写了篇论文:新冠病毒起源于去年8月的武汉...
  4. linux socket中 send recv函数的 flags参数
  5. 干掉Postman?测试接口直接生成API文档,这工具强烈推荐!
  6. c++模板库的一些基本使用
  7. 内核中的page fault copy_from_user
  8. 测试并发应用 (一)监控Lock接口
  9. linux 取文件字节数,如何在Linux上的C中获取文件中的字符数(而不是字节数)
  10. Git基础入门(一)Git基础概念
  11. opencv sobel算子的理解
  12. matlab神经网络训练方法,matlabrbf神经网络工具箱
  13. 永恒之蓝漏洞补丁-MS17010补丁列表KB号
  14. 创造与魔法服务器多久维护一次,创造与魔法维护大概多久 | 手游网游页游攻略大全...
  15. 哲学家进餐问题的模拟【操作系统】
  16. 服务器托管的费用介绍
  17. linux 查看ip
  18. php 读取rtf文件,rtf是什么格式?
  19. UWB技术的工作原理
  20. 小工具:找出序列中的极值点

热门文章

  1. setuna.exe在win10下使用,桌面自动放大问题
  2. BootDO框架的使用及介绍
  3. dem数据(dem数据格式)
  4. mysql+修改字段长度语句,mysql修改字段长度的sql语句分享
  5. 软件质量保证与测试 问答题
  6. C语言的源代码文件、目标文件和可执行文件
  7. POKERNOSE 写字心得(汇总)
  8. 篮球比赛JAVA代码_Java编程实现NBA赛事接口调用实例代码
  9. error:“Component name “Home“ should always be multi-word vue/multi-word-component-names“
  10. 服务器设置 上传excel文件夹,excel上传服务器