工作中用到需要一个判断当前时间是否在 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. Android failed creating starting window

    /***************************************************************************** * Android failed crea ...

  2. 浅析extendedLayout, automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars

    参考文章: http://stackoverflow.com/questions/18798792/explaining-difference-between-automaticallyadjusts ...

  3. MySQL基础之第14章 存储过程和函数

    避免编写重复的语句 安全性可控 执行效率高 14.1.创建存储过程和函数 14.1.1.创建存储过程 CREATE PROCEDUREsp_name ([proc_parameter[,...]]) ...

  4. android view生命周期

    onFinishInflate() 当View中所有的子控件均被映射成xml后触发 onMeasure( int ,  int ) 确定所有子元素的大小 onLayout( boolean ,  in ...

  5. PhoneGap API Documentation API Reference

    API Reference-API参考 Accelerometer-加速度计 Tap into the device's motion sensor.-点击进入该设备的运动传感器. Camera-相机 ...

  6. “-bash: svn: command not found”

    今天升级了Xcode5.界面更加的清爽了,但是在命令行里SVN也失去了作用了. 当我要更新的时候提示:“-bash: svn: command not found” 解决办法: 1:打开Prefere ...

  7. Spring 框架概述

    ◆简介 目的:解决企业应用开发的复杂性 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 范围:任何Java应用 Spring 框架是一个分层架构,由 7 个定义良好的模块组成. ...

  8. ylb:多表的连接与练习(第三方关联表的应用)

    ylbtech-SQL Server:SQL Server-多表的连接与练习(第三方关联表的应用) SQL Server 多表的连接与练习(第三方关联表的应用). 1,多表的连接与练习(第三方关联表的 ...

  9. MYSQL中 ENUM、SET 类型(建议用tinyint代替)

    ENUM类型 ENUM 是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举. 在下列某些情况下,值也可以是空串("") 或 NULL: 如果 ...

  10. 字符串中符号的替换---replace的用法

    #include<iostream> #include<string> using namespace std; int main() { string s1 = " ...