工作中用到需要一个判断当前时间是否在 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. django - 修改 自增长id,起始值

    常常你会遇到这样的情况,需要自增长的起始值是 0,再次从 0开始. 两个选择: 1. drop table_name; django重新建表. 2. ALTER TABLE table_name AU ...

  2. 【转】NSArray排序方法

    原文网址:http://www.cnblogs.com/xiaobaizhu/archive/2013/06/05/3119983.html 从网上查的,非常方便的排序api,功能也很强大 1.sor ...

  3. 【转】Android Interface的使用

    原文网址:http://www.3g-edu.org/Android_free/art115.htm Android应用程序采用Java语言编写,Java语法和C/C++有很大的相似性,但也有一些特别 ...

  4. vim的保存误认为utf8问题

     用vim改脚本改到一处写到'太原':w一下,再打开,,结果给乱码了...我默认sql是用cp936的,,,想到到和记录本的联通问题一样....   可能会问我为什么不用utf8,,,,因为ms200 ...

  5. ubuntu myeclipse 启动时提示 A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be avail ....

    jdk已经安装过但是启动eclipse时提示“A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be avail  ...

  6. linux下valgrind的使用概述

    Valgrind简介: Valgrind是动态分析工具的框架.有很多Valgrind工具可以自动的检测许多内存管理和多进程/线程的bugs,在细节上剖析你的程序.你也可以利用Valgrind框架来实现 ...

  7. 什么是CC攻击,如何防止网站被CC攻击的方法总汇

    CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一 ...

  8. Json转换插件

    附赠一个简单的使用案例,希望能帮助大家使用! /* json.js 2007-08-05 Public Domain This file adds these methods to JavaScrip ...

  9. 《深入理解C#》第3版 学习进度备忘

    学习资源:<深入理解C#>第3版 知识基础支持: <C# in a nutshell> O Reilly出版社,是一本从头介绍C#的优秀图书.<Essential C#5 ...

  10. C#判断程序是由Windows服务启动还是用户启动

    在Windows系统做网络开发,很多时候都是使用Windows服务的模式,但在调度阶段,我们更多的是使用控制台的模式.在开发程序的时候,我们在Program的Main入口进行判断.最初开始使用Envi ...