• date之Hi时间的思考


    工作中用到需要一个判断当前时间是否在 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,占用的空间和时间损耗也比较低,不过该方式也不太好维护,需要注释和斟酌才能看的明白。

    各种方式各有优劣,大家可以选择适合自己的,进行编码和设计。 

  • 相关阅读:
    多模块应用自动化部署
    shell杀死指定端口的进程
    SpringBoot打包成war
    Spring Boot:The field file exceeds its maximum permitted size of 1048576 bytes
    nginx上配置phpmyadmin
    Ubuntu16.04中php如何切换版本
    E:dpkg was interrupted, you must manually run'dpkg配置'to correct the problem.
    Edusoho之LAMP环境搭建
    cocos2d-x -3.81+win7+vs2013开发环境创建新的项目
    M2Mqtt is a MQTT client available for all .Net platform
  • 原文地址:https://www.cnblogs.com/lizhaoyao/p/6247911.html
Copyright © 2020-2023  润新知