解析时间parse time

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

<?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

posted @ 2019-03-02 16:10  Chrdai  阅读(5142)  评论(0编辑  收藏  举报