• 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,占用的空间和时间损耗也比较低,不过该方式也不太好维护,需要注释和斟酌才能看的明白。

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

  • 相关阅读:
    中文字体在CSS中的表达方式
    图片上传+预览+剪切解决方案我们到底能走多远系列(20)
    C# — 饼形图之插入介绍文字
    CSS 网页布局中文排版的9则技巧
    Android UI 优化 使用<include/>和 <merge />标签
    SQLite 的日期时间函数
    GSM、GPRS、EDGE、2G、3G与WAP的关系
    WPF中的Style(风格,样式)
    给力分享新的ORM => Dapper
    WCF开发框架形成之旅如何实现X509证书加密
  • 原文地址:https://www.cnblogs.com/lizhaoyao/p/6247911.html
Copyright © 2020-2023  润新知