后花院 | 静心思考

敦兮其若朴,旷兮其若谷

平常在写程序的过程中难免涉及到时间问题,一开始我们基本上使用时间戳time()函数走天下。但有的时候我们需要更加精确的时间,比如测测程序的运行速度,如果只精确到秒,那有可能得到的结果总是0,很显然程序运行的速度用秒(s)做单位太大了,这时候我们就会用到毫秒(ms)。

请记住: 1s = 1000ms  {默念三遍记得牢}

首先获取毫秒的函数是 microtime([ bool $get_as_float = false ] ),接下来我们看一下输出结果:

echo microtime();//输出:0.58478200 1499254181

echo microtime(true);//输出:1499254181.5848

由上可见,不加参数true的毫秒函数返回的是一个形式为“msec sec”的字符串,而传入true参数的则返回的是一个将毫秒部分取四位(参照第五位四舍五入)后作为小数部分的浮点数,不过前者经度更高。

如果我想要取得一个整数型的毫秒值,一般是(当然损耗的还是精度):

echo round(microtime(true)*1000);//输出:1499254181585

这样我们通常使用最后一种获取整型毫秒值的办法就可以通过毫秒来记录相关时间。

最后还有一个函数参考gettimeofday([ bool $get_as_float = false ] ),这个函数返回的精度更准确一些,如下:

print_r(gettimeofday());
//输出如下数组
Array
(
    [sec] => 1499254181    //Unix 纪元以来的秒
    [usec] => 584782       //微秒
    [minuteswest] => -480  //格林尼治以西的分
    [dsttime] => 0         //夏令时修正类型
)
echo gettimeofday(true);//输出:1499254181.5848

最最后,再分享个小知识,当当当当~~,客观请往下看:

问:为什么我们好多程序中的时间最早都是1970年1月1日 00:00:00开始呢?

答:这个和UNIX系统有关,当时UNIX面世的时候都是32位系统,32位系统表示时间时,有符号数表示是68年,他们可能觉得足够了,就这么定了,后来C语言的time函数也是用了这个,JAVA啥的也是用的这个,PHP本身就是C语言写的,用这个也是情理之中的.如果32位系统到2038年就是程序最大年限了,再超过这个,会出现异常,但64系统的出现就解决了这个问题.

评论

© 后花院 | 静心思考 | Powered by EMLOG | Theme by NIMA

友情链接:Nutcracker