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

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

date之Hi时间的思考的更多相关文章

  1. Date Range Picker时间插件非常不错,主要体现在选择一个时间区间

    地址:http://www.daterangepicker.com/ demo地址:http://tamble.github.io/jquery-ui-daterangepicker/#event a ...

  2. Eclipse 改动凝视的 date time 日期时间格式,即${date}变量格式

    Eclipse 改动凝视的 date time 日期时间格式,即${date}变量格式 找到eclipse安装文件夹以下的plugins文件夹,搜索 org.eclipse.text ,找到一个jar ...

  3. Java中在java.sql.Date的系统时间上加上30天并写入oracle

    在java.sql.Date的系统时间上加上30天,并写入oracle 思路:通过 Calendar.getInstance() 获得对象,然后 add() 方法添加 时间,再通过 new java. ...

  4. Oracle date timestamp 毫秒 - 时间函数总结(转)

    原文地址:Oracle date timestamp 毫秒 - 时间函数总结 yyyy-mm-dd hh24:mi:ss.ff  年-月-日 时:分:秒.毫秒 --上一月,上一年select add_ ...

  5. JS取date的前一天时间

    在javascript中取date的前一天时间: new Date(new Date()-24*60*60*1000),//取前一天的时间

  6. toLocaleTimeString()方法在IE和谷歌浏览器上 根据本地时间格式,把 Date 对象的时间部分(不含日期)转换为“时间字符串”存在区别

    这两天修改一个bug,发现一个问题:  toLocaleTimeString()方法在IE和谷歌浏览器上 根据本地时间格式,把 Date 对象的时间部分(不含日期)转换为“时间字符串”存在区别.方法原 ...

  7. javascript Date对象 之 时间转字符串

    javascript Date对象 --> 时间转字符串: 测试代码: <!DOCTYPE html> <html lang="en"> <he ...

  8. perl在linux下通过date获取当前时间

    perl处理文件的时候最好添加上 处理的时间戳,获取系统的时间又多种方法,但是反引号是最原始的,不需要其他外界条件和lib的支持. my $now = `date "+%F %T" ...

  9. Elasticsearch Date类型,时间存储相关说明

    资料 网址 Elasticsearch 插入时间字段时数据格式问题 https://segmentfault.com/a/1190000016296983 Elasticsearch Date类型,时 ...

随机推荐

  1. 【英语】Bingo口语笔记(24) - L的发音技巧

    舌头往上跑

  2. Linux apt-get

    apt-get apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸载软件或操作系统. apt-get命令一般需要root权限执行, ...

  3. 如何在vmware上创建共享磁盘

    1.先在你本机的vmware安装目录上找到 vmware-vdiskmanager.exe 执行文件. 我的目录是 d:\vmware\vmware-vdiskmanager.exe 再用cmd终端( ...

  4. LoopBar – Tap酒吧与无限滚动

    相约 LoopBar – 标签栏与无限滚动为Android由Cleveroad 在Cleveroad我们最近认识到通过使用任何一个应用程序类别的导航,导航面板是很无聊和琐碎.这就是为什么我们的设计师的 ...

  5. ubuntu下 apt-get install 下载的文件存放的目录

    apt-get把下载的deb包全部放在/var/cache/apt/archives下面,该目录下的文件可以删除.当然用 sudo apt-get clean 命令也可以,这个命令只会删除缓存起来的d ...

  6. 开发者必须知道的HTML5十五大新特性

    HTML5想必大家都很熟悉了,因为太多的媒体在讨论这一技术.然而,你能准确地说出HTML5带来了哪些新特性吗?本文总结了HTML5带来的15项你必须知道的新特性. 一起来看下: 1.新的文档类型  ( ...

  7. selenium webdriver+windows+python+chrome遇见的问题

    win7系统,在python中调用ChromeDriver 一直报错 “ selenium.common.exceptions.WebDriverException: Message: 'Chrome ...

  8. [转]Linux的tail 与head 命令

    转自:http://blog.csdn.net/carolzhang8406/article/details/6112707 head命令是用来查看具体文件的前面几行的内容,具体格式如下: head ...

  9. js代码大全

    超级实用且不花哨的js代码大全 事件源对象event.srcElement.tagNameevent.srcElement.type 捕获释放event.srcElement.setCapture() ...

  10. VS2013 调试MVC源码[MVC5.2.3+MVC4Web项目]

    1.目前MVC源码版本为5.2.3,下回来后用VS2013打开,把System.Web.Mvc项目的版本号改为4.0.0.1 2.在解决方案下建一个MVC4项目,.NET选4.5,修改根目录以及Vie ...