工作中用到需要一个判断当前时间是否在 23:50到1:00之间的一段程序,在和别人的讨论中基本上有以下两种做法
1.分别获取时分进行判断和比较
<?php function check_time1() { list($hour,$time)=explode("-",date("H-i",time()));//分开获取hour minute if($hour<1 || ($hour==23 && $minute>50)) { echo "time is between 23:50 and 1:00";//hour小于1 或者 (hour等于23 minute大于50) } } ?>
该方法比较普遍基础能想得到,循环10000次执行效率是这样的
2.通过时间戳做比较 比较今天凌晨的时间戳和明天凌晨的时间戳
<?php function check_time2() { $time=time(); $zero_time=strtotime(date("Y-m-d"));//取出今天凌晨的时间 if($time-$zero_time<3600 || $zero_time+86400-$time<600) { echo "time is between 23:50 and 1:00";//现在时间减凌晨时间小于3600(说明在凌晨一点以前) 明天的凌晨减去现在的时间小于600(说明现在的时间到了23:50分以后) } } ?>
该方法由网友提供,不过感觉思考起来需要绕弯子,循环10000次执行效率是这样的
3.通过对Hi的不断分析,我想到一个办法是这样的 通过十进制整型转行比较 代码如下
<?php function check_time3() { $time=date("Hi",time())+0;//获取时分进行转整型 if($time<100||$time>2350) { echo "time is between 23:50 and 1:00";//如果时分小于100 说明在1点前 如果时分大于2350 说明在23:50分以后 } } ?>
该方法代码执行效率应该比较高,不过同样需要思考才能读懂代码,可读性不算太好,循环10000次执行的效率是这样的
经过分析对比发现,如果调用时间戳来比较 肯定是比较慢的,因为时间转换很耗时,而且两个差值比较由于数值大,比较起来也慢,用时和分分开比较是比较基础的做法,但是效率还不是最高,这种方法最容易理解和维护,用时分组成一个整数进行比较效率较高,因为时分没有被拆开 而且比较的数值都是比较小的 最大是2400,占用的空间和时间损耗也比较低,不过该方式也不太好维护,需要注释和斟酌才能看的明白。
各种方式各有优劣,大家可以选择适合自己的,进行编码和设计。