下面是一个解析时间的一个类

<?php
/**
* @purpose : 解析时间
* author: 袋鼠
* date: 2019/3/1
* time: 19:43
*/ class ParseTime
{
/**
* @purpose: 将一个时间范围解析成datetime格式或者timestamp格式
* @param string $value 由分隔符(如:-)分割的一个时间范围,格式:Y/m/d H:i:s - Y/m/d H:i:s,如2019-03-02 12:00:00 -2019-03-02 14:00:00
* @param string $type 返回时间类型,支持timestamp和datetime两种类型
* @param string $step 分隔符,默认为 -
* @param bool $autocomplate 是否自动补全时分秒,默认为true
* @return array 相应时间格式的数组,如:array(2) { [0]=> string(19) "2019/03/02 12:00:00" [1]=> string(19) "2019/03/02 14:59:59" }
*/
public static function parseDateRange($value,$type,$step='-',$autocomplate=true)
{
if(empty($value)){
return false;
} $ts = array_map(function($v){
return trim($v);
},explode($step,$value)); //是否自动补全H:i:s分开处理
if($autocomplate && count($ts) == 2) {
//时间戳格式和datetime格式的分别进行转换为时间戳格式
if (is_numeric($ts[1]) && date('His', $ts[1]) === '000000') {
$ts[1] = $ts[1] + 86399; // 加上 23:59:59
}elseif(date('His',strtotime($ts[1])) == '00000'){
$ts[0] = strtotime($ts[0]);
$ts[1] = strtotime($ts[1]) + 86399;
}
}elseif(count($ts) == 2 && $ts[0] == $ts[1]){
if (is_numeric($ts[1]) && date('His', $ts[1]) === '000000') {
$ts[1] = $ts[1] + 86399;
}elseif(date('His',strtotime($ts[1])) == '00000'){
$ts[0] = strtotime($ts[0]);
$ts[1] = strtotime($ts[1]) + 86399;
}
} if($type == 'timestamp'){
return $ts;
}else{
return array_map(function($v){
return date('Y-m-d H:i:s',$v);
},$ts);
} } /**
* @purpose: 将H:i:s格式的时间范围转换成整数值
* @param string $value 时间范围,格式为 H:i:s - H:i:s, 例如12:00:00 - 14:59:59
* @param string $step 分割符,默认为 -
* @return array 转换后的整数值,如:array(2) { [0]=> int(43200) [1]=> int(53999) }
*/
public static function parseHourRange($value,$step='-')
{
if(empty($value)){
return false;
} return array_map(function ($v){
//如果没有:,返回整数值,注意此处要用 === 而不是 ==,因为 0==false
if(strpos($v,':') === false){
return intval($v);
}
$arrTime = array_reverse(explode(':',$v));
$i = $s = 0;
//将倒序后的时间乘以60的$i次方,比如14::59:59=>倒序[59,59,14]=>整数值:59*60^0(秒) + 59*60^1(分)+ 14*60^2(时)=53999
foreach($arrTime as $time){
$s += $time * pow(60,$i) ;
$i ++;
}
return $s;
},explode($step,$value));
}
}

此类为袋鼠工作中所总结,如有转载,请注明出处:https://www.cnblogs.com/chrdai/p/10461522.html

解析时间parse time的更多相关文章

  1. 使用 cURL 获取站点的各类响应时间 – dns解析时间,响应时间,传输时间

    http://zhangrenfang8738.blog.163.com/blog/static/95401881201142711450245/ curl监控站点响应时间 2011-05-27 11 ...

  2. 如何获取浏览器的DNS解析时间

    上一篇博客提到09年初WED团队开发的浏览器环境检测工具时,忘记说这个是aoao同学的创意了.不过没关系,据说他又在秘密规划新版本了,再据说新版要增加的DNS解析时间计算已经开发完成,点上面那个链接就 ...

  3. 分析DNS解析时间

    提高网页的打开速度,一般地我们会选择使用CDN,利用“就近原则”让用户在最短的时间内获取到服务器资源,实际应用当中采用CDN的方式提高网站访问速度的效果也是最明显的.这也就是为什么国外的空间打开速度远 ...

  4. curl测试dns解析时间及tcp连接时间

    1.用Linux下的curl命令测量网络请求(分号是分隔符,可以是其他符号): curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer ...

  5. How Javascript works (Javascript工作原理) (十四) 解析,语法抽象树及最小化解析时间的 5 条小技巧

    个人总结:读完这篇文章需要15分钟,文章介绍了抽象语法树与js引擎解析这些语法树的过程,提到了懒解析——即转换为AST的过程中不直接进入函数体解析,当这个函数体需要执行的时候才进行相应转换.(因为有的 ...

  6. C++方式解析时间字符串和计算时间

    #include "StdAfx.h"#include "MySetTimeByVT.h" #include <ATLComTime.h>#incl ...

  7. 不当使用 union all 导致的SQL解析时间过长的问题优化

    在帮助用户优化应用过程中,发现用户大量使用union all 导致SQL解析非常缓慢的问题.考虑到这个问题很有代表意义,我觉得很有必要对于问题进行总结. 一.用户例子 WITH company_use ...

  8. 返回json格式时间,解析时间

    传入:Json格式的时间 JS如下: yyyy-M(MM)-d(dd) H(HH):m(mm):s(ss) function timeStamp2String(time) { var data=tim ...

  9. python解析时间格式脚本

    对于这种时间格式:發表於: 星期一 五月 28, 2012 6:59 am import re INPUT = "發表於: 星期一 五月 28, 2012 6:59 am 文章主題: 對&l ...

随机推荐

  1. P1822 魔法指纹

    一道放在分块训练中的分块打表屑题 看了神NaCly_Fish的题解学了间隔打表(话说这么屑的东西有什么学的必要吗) 内容大多摘自大佬的题解 1,答案可递推,才适合间隔打表 什么叫可递推呢?假设f[n] ...

  2. [NLP] 酒店名归类

    目标: 我们内部系统里记录的酒店名字是由很多人输入的,每个人输入的可能不完全一样,比如,‘成都凯宾斯基大酒店’, ‘凯宾斯基酒店’, ‘凯宾斯基’, 我们的初步想法是能不能把大量的记录归类,把很多相似 ...

  3. linux下进入root用户登录

    1.打开终端,输入sudo passwd -u root 输入当前用户的登录密码,提示如下标红区域信息 解决方案: 1)直接输入命令:su,输入当前用户登录密码 2)添加sudoers文件的写权限,命 ...

  4. Mountaineers Gym - 102021M (LCA+MST)

    题目链接: Mountaineers  Gym - 102021M 题目大意:给你一个n*m的矩阵,a[i][j]代表当前方块的高度,然后每次询问给你一个起点和终点,然后问你在这个图上你选择一条路径, ...

  5. Python自动化中的鼠标事件

    1)form selenium.webdriver.common.action_chains import ActionChains  导入该模块 2)ActionChains(driver) :用于 ...

  6. C#使用RabbitMQ(转)

      1. 说明 在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地 ...

  7. 【转】Oracle之索引

    简介 1.说明 1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的目录.在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用目录可以不用翻阅整本书即可找到想要的信 ...

  8. 深度探索C++对象模型

    深度探索C++对象模型 什么是C++对象模型: 语言中直接支持面向对象程序设计的部分. 对于各个支持的底层实现机制. 抽象性与实际性之间找出平衡点, 需要知识, 经验以及许多思考. 导读 这本书是C+ ...

  9. 010_TCP queue的研究

    先来回顾下三次握手里面涉及到的问题:1. 当 client 通过 connect 向 server 发出 SYN 包时,client 会维护一个 socket 等待队列,而 server 会维护一个 ...

  10. Flask+SQLAlchemy+alembic+Flask-RESTful使用

    前言 其实准备把这篇删掉,先写Flask-restful相关的,后来想想大体框架还是先写出来,这两天踩了很多坑,有的谷歌也没有答案.一直摸索也总算是开始了. 正文 SQLAlchemy/alembic ...