>백엔드 개발 >PHP 튜토리얼 >PHP로 구현된 시간 도우미 클래스(코드 예)

PHP로 구현된 시간 도우미 클래스(코드 예)

不言
不言앞으로
2018-12-29 10:07:493361검색

이 글의 내용은 PHP에서 구현된 시간 도움말 클래스(코드 예제)에 대한 내용입니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

작업 중 다양한 시간 연산이 자주 발생하므로 코드 재사용률을 높이기 위해 도움말 도구 클래스를 캡슐화했습니다.

주요 기능

일수 차이에 따라 연속 기간 가져오기

/**
     * 根据相差的天数获取所有连续的时间段
     * @param $diffDay
     * @param string $dateFormat
     * @return array
     */
    public static function getContinuesDayDiffDay($diffDay, $dateFormat = 'Y-m-d') {
        $today = date('Y-m-d');
        $timeLabel = [];
        for ($i=1;$i<=$diffDay;$i++){
            $diff = $diffDay - $i;
            $mday = date($dateFormat,strtotime("$today -$diff day"));
            array_push($timeLabel,$mday);
        }
        //转化查询条件
        $year = date(&#39;Y&#39;);
        $startDay = str_replace(&#39;.&#39;,&#39;-&#39;,$timeLabel[0]);
        $endDay = str_replace(&#39;.&#39;,&#39;-&#39;,$timeLabel[$diffDay-1]);
        $startTime = strtotime($startDay." 00:00:00");
        $endTime = strtotime($endDay." 23:59:59");
        return [
            &#39;start_time&#39; => $startTime,
            'end_time' => $endTime,
            'time_label' => $timeLabel,
        ];
    }

Get a 두 날짜를 기준으로 연속된 기간

/**
     * 根据开始和结束时间获取所有连续的时间段
     * @param string $startDay 开始日期 格式:Y-m-d
     * @param string $endDay 开始日期 格式:Y-m-d
     * @param string $dateFormat
     * @return array
     */
    public static function getContinuesDayByRange($startDay, $endDay, $dateFormat = 'Y-m-d') {
        $timeLabel = [];
        if(strtotime($startDay) > strtotime($endDay)){
            $tmp = $startDay;
            $endDay = $tmp;
            $startDay = $endDay;
        }
        if($startDay == $endDay){
            array_push($timeLabel,$startDay);

            $startTime = strtotime($startDay." 00:00:00");
            $endTime = strtotime($endDay." 23:59:59");
            $timeLabel =  [
                'start_time' => $startTime,
                'end_time' => $endTime,
                'time_label' => $timeLabel,
            ];
            return $timeLabel;
        }

        $targetDay = $startDay;
        while ($targetDay != $endDay){
            array_push($timeLabel,$targetDay);
            $targetDay = date($dateFormat,strtotime("$targetDay +1 day"));
        }

        array_push($timeLabel,$endDay);

        //增加
        $startTime = strtotime($startDay." 00:00:00");
        $endTime = strtotime($endDay." 23:59:59");
        $timeLabel =  [
            'start_time' => $startTime,
            'end_time' => $endTime,
            'time_label' => $timeLabel,
        ];
        return $timeLabel;
    }

날짜를 기준으로 월의 시작 시간과 종료 시간을 가져옵니다.

 /**
     * 根据日期获取本月的开始时间和结束时间
     * @param $date   Y-m    2017-10
     * @return array
     */
    public static function getMonthDaysByDate($date) {
        $data = [];
        $timestamp = strtotime( $date );
        $data['start_time'] = date( 'Y-m-01 00:00:00', $timestamp );
        $mdays = date( 't', $timestamp );
        $data['end_time'] = date( 'Y-m-' . $mdays . ' 23:59:59', $timestamp );
        return $data;
    }

시간 친화적인 형식 지정 스타일

/**
     * 时间友好型提示风格化(即微博中的XXX小时前、昨天等等)
     * 即微博中的 XXX 小时前、昨天等等, 时间超过 $time_limit 后返回按 out_format 的设定风格化时间戳
     * @param  int
     * @param  int
     * @param  string
     * @param  array
     * @param  int
     * @return string
     */
    public static function getFriendlyTime($timestamp, $timeLimit = 604800, $out_format = 'Y/m/d', $formats = null, $now = null){
        /*if (get_setting('time_style') == 'N')
        {
            return date($out_format, $timestamp);
        }*/

        if (!$timestamp)
        {
            return false;
        }

        if ($formats == null)
        {
            $formats = [
                'YEAR' =>'%s 年前',
                'MONTH' => '%s 月前',
                'DAY' => '%s 天前',
                'HOUR' => '%s 小时前',
                'MINUTE' => '%s 分钟前',
                'SECOND' => '%s 秒前'
            ];
        }

        $now = $now == null ? time() : $now;
        $seconds = $now - $timestamp;

        if ($seconds == 0)
        {
            $seconds = 1;
        }

        if (!$timeLimit OR $seconds > $timeLimit)
        {
            return date($out_format, $timestamp);
        }

        $minutes = floor($seconds / 60);
        $hours = floor($minutes / 60);
        $days = floor($hours / 24);
        $months = floor($days / 30);
        $years = floor($months / 12);

        if ($years > 0)
        {
            $diffFormat = 'YEAR';
        }
        else
        {
            if ($months > 0)
            {
                $diffFormat = 'MONTH';
            }
            else
            {
                if ($days > 0)
                {
                    $diffFormat = 'DAY';
                }
                else
                {
                    if ($hours > 0)
                    {
                        $diffFormat = 'HOUR';
                    }
                    else
                    {
                        $diffFormat = ($minutes > 0) ? 'MINUTE' : 'SECOND';
                    }
                }
            }
        }

        $dateDiff = null;

        switch ($diffFormat)
        {
            case 'YEAR' :
                $dateDiff = sprintf($formats[$diffFormat], $years);
                break;
            case 'MONTH' :
                $dateDiff = sprintf($formats[$diffFormat], $months);
                break;
            case 'DAY' :
                $dateDiff = sprintf($formats[$diffFormat], $days);
                break;
            case 'HOUR' :
                $dateDiff = sprintf($formats[$diffFormat], $hours);
                break;
            case 'MINUTE' :
                $dateDiff = sprintf($formats[$diffFormat], $minutes);
                break;
            case 'SECOND' :
                $dateDiff = sprintf($formats[$diffFormat], $seconds);
                break;
        }

        return $dateDiff;
    }

날짜를 기준으로 요일을 가져옵니다. date

/**
     * 获取星期几
     * @param $date
     * @return
     */
    public static function getWeekDay($date) {
        //强制转换日期格式
        $dateStr=date('Y-m-d',strtotime($date));
        //封装成数组
        $arr=explode("-", $dateStr);
        //参数赋值
        //年
        $year=$arr[0];

        //月,输出2位整型,不够2位右对齐
        $month=sprintf('%02d',$arr[1]);
        //日,输出2位整型,不够2位右对齐
        $day=sprintf('%02d',$arr[2]);

        //时分秒默认赋值为0;
        $hour = $minute = $second = 0;

        //转换成时间戳
        $strap = mktime($hour,$minute,$second,$month,$day,$year);

        //获取数字型星期几
        $numberWk=date("w",$strap);

        //自定义星期数组
        $weekArr=array(7,1,2,3,4,5,6);

        //获取数字对应的星期
        return $weekArr[$numberWk];
    }

지정한 날짜의 전후 일수가 같은 시간 범위를 구합니다.

/**
     * 获取指定日期前后相同时间天数的范围时间
     * @param int $dayDiff
     * @param string $day
     * @param string $dateFormat
     * @return array
     */
    public static function getPointDaySameRangeContinuesTime($dayDiff = 0,$day = "", $dateFormat = "Y-m-d") {
        $day = $day?$day:date($dateFormat);
        $startTime = date($dateFormat,strtotime("$day -$dayDiff day"));
        $endTime = date($dateFormat,strtotime("$day +$dayDiff day"));
        $result = self::getContinuesDayByRange($startTime,$endTime,$dateFormat = 'Y-m-d');
        return $result;
    }

두 날짜의 차이 일수를 구합니다.

/**
     * 获取两个日期之间相差的天数
     * @param string $day1 第一个日期,格式为Y-m-d
     * @param string $day2 第二个日期,格式为Y-m-d
     * @return integer
     */
    public static function getDiffBetweenTwoDays($day1, $day2) {
        $second1 = strtotime($day1);
        $second2 = strtotime($day2);
        if ($second1 < $second2) {
            $tmp = $second2;
            $second2 = $second1;
            $second1 = $tmp;
        }
        return ($second1 - $second2) / 86400;
    }

지정한 날짜와 일수에 따라, 종료일

/**
     * 根据日期和相差的天数获取结束的天数
     * @param $day
     * @param $diffDay
     * @param bool $isBefore
     * @return false|string
     */
    public static function getEndDayByDayAndDiff($day, $diffDay, $isBefore = false) {
        $operator = $isBefore ? "-" : "+";
        $endDay = date('Y-m-d',strtotime("$day $operator $diffDay day"));
        return $endDay;
    }

두 날짜가 맞는지 판단 초를 분으로 변환

/**
     * 判断两个时间是否同一天
     * @param string $date1 Y-m-d
     * @param string $date2 Y-m-d
     * @return bool
     */
    public static function isSameDay($date1, $date2) {
        $day1 = self::dateTime(strtotime($date1)) ;
        $day2 = self::dateTime(strtotime($date2));
        return $day1 == $day2;
    }

같은 날의 밀리초 구하기

/**
     * 转换秒钟为分钟
     * @param $seconds
     * @return string
     */
    public static function convertSecondToTime($seconds) {
        $reminded = strval($seconds % 60);
        $minute = strval(($seconds - $reminded) / 60);
        if(strlen($minute)<2){
            $minute = '0'.$minute;
        }
        if(strlen($reminded)<2){
            $reminded = '0'.$reminded;
        }
        $time = $minute.":".$reminded;
        return $time;
    }

위 내용은 PHP로 구현된 시간 도우미 클래스(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제