轮子:php时间操作类

这是一个轮子,主要是项目中常用的对时间操作的一些功能函数封装。

php时间操作类

一、根据相差的天数获取连续的时间段。

  1. /**
  2.      * 根据相差的天数获取所有连续的时间段
  3.      * @param $diffDay
  4.      * @param string $dateFormat
  5.      * @return array
  6.      */
  7.     public static function getContinuesDayDiffDay($diffDay$dateFormat = 'Y-m-d') {
  8.         $today = date('Y-m-d');
  9.         $timeLabel = [];
  10.         for ($i=1;$i<=$diffDay;$i++){
  11.             $diff = $diffDay - $i;
  12.             $mday = date($dateFormat,strtotime("$today -$diff day"));
  13.             array_push($timeLabel,$mday);
  14.         }
  15.         //转化查询条件
  16.         $year = date('Y');
  17.         $startDay = str_replace('.','-',$timeLabel[0]);
  18.         $endDay = str_replace('.','-',$timeLabel[$diffDay-1]);
  19.         $startTime = strtotime($startDay." 00:00:00");
  20.         $endTime = strtotime($endDay." 23:59:59");
  21.         return [
  22.             'start_time' => $startTime,
  23.             'end_time' => $endTime,
  24.             'time_label' => $timeLabel,
  25.         ];
  26.     }

二、根据两个日期获取连续的时间段。

  1. /**
  2.      * 根据开始和结束时间获取所有连续的时间段
  3.      * @param string $startDay 开始日期 格式:Y-m-d
  4.      * @param string $endDay 开始日期 格式:Y-m-d
  5.      * @param string $dateFormat
  6.      * @return array
  7.      */
  8.     public static function getContinuesDayByRange($startDay$endDay$dateFormat = 'Y-m-d') {
  9.         $timeLabel = [];
  10.         if(strtotime($startDay) > strtotime($endDay)){
  11.             $tmp = $startDay;
  12.             $endDay = $tmp;
  13.             $startDay = $endDay;
  14.         }
  15.         if($startDay == $endDay){
  16.             array_push($timeLabel,$startDay);
  17.             $startTime = strtotime($startDay." 00:00:00");
  18.             $endTime = strtotime($endDay." 23:59:59");
  19.             $timeLabel =  [
  20.                 'start_time' => $startTime,
  21.                 'end_time' => $endTime,
  22.                 'time_label' => $timeLabel,
  23.             ];
  24.             return $timeLabel;
  25.         }
  26.         $targetDay = $startDay;
  27.         while ($targetDay != $endDay){
  28.             array_push($timeLabel,$targetDay);
  29.             $targetDay = date($dateFormat,strtotime("$targetDay +1 day"));
  30.         }
  31.         array_push($timeLabel,$endDay);
  32.         //增加
  33.         $startTime = strtotime($startDay." 00:00:00");
  34.         $endTime = strtotime($endDay." 23:59:59");
  35.         $timeLabel =  [
  36.             'start_time' => $startTime,
  37.             'end_time' => $endTime,
  38.             'time_label' => $timeLabel,
  39.         ];
  40.         return $timeLabel;
  41.     }

三、根据日期获取当月的开始时间和结束时间。

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

四、时间友好格式化风格。

  1. /**
  2.      * 时间友好型提示风格化(即微博中的XXX小时前、昨天等等)
  3.      * 即微博中的 XXX 小时前、昨天等等, 时间超过 $time_limit 后返回按 out_format 的设定风格化时间戳
  4.      * @param  int
  5.      * @param  int
  6.      * @param  string
  7.      * @param  array
  8.      * @param  int
  9.      * @return string
  10.      */
  11.     public static function getFriendlyTime($timestamp$timeLimit = 604800, $out_format = 'Y/m/d', $formats = null, $now = null){
  12.         /*if (get_setting('time_style') == 'N')
  13.         {
  14.             return date($out_format, $timestamp);
  15.         }*/
  16.         if (!$timestamp)
  17.         {
  18.             return false;
  19.         }
  20.         if ($formats == null)
  21.         {
  22.             $formats = [
  23.                 'YEAR' =>'%s 年前',
  24.                 'MONTH' => '%s 月前',
  25.                 'DAY' => '%s 天前',
  26.                 'HOUR' => '%s 小时前',
  27.                 'MINUTE' => '%s 分钟前',
  28.                 'SECOND' => '%s 秒前'
  29.             ];
  30.         }
  31.         $now = $now == null ? time() : $now;
  32.         $seconds = $now - $timestamp;
  33.         if ($seconds == 0)
  34.         {
  35.             $seconds = 1;
  36.         }
  37.         if (!$timeLimit OR $seconds > $timeLimit)
  38.         {
  39.             return date($out_format$timestamp);
  40.         }
  41.         $minutes = floor($seconds / 60);
  42.         $hours = floor($minutes / 60);
  43.         $days = floor($hours / 24);
  44.         $months = floor($days / 30);
  45.         $years = floor($months / 12);
  46.         if ($years > 0)
  47.         {
  48.             $diffFormat = 'YEAR';
  49.         }
  50.         else
  51.         {
  52.             if ($months > 0)
  53.             {
  54.                 $diffFormat = 'MONTH';
  55.             }
  56.             else
  57.             {
  58.                 if ($days > 0)
  59.                 {
  60.                     $diffFormat = 'DAY';
  61.                 }
  62.                 else
  63.                 {
  64.                     if ($hours > 0)
  65.                     {
  66.                         $diffFormat = 'HOUR';
  67.                     }
  68.                     else
  69.                     {
  70.                         $diffFormat = ($minutes > 0) ? 'MINUTE' : 'SECOND';
  71.                     }
  72.                 }
  73.             }
  74.         }
  75.         $dateDiff = null;
  76.         switch ($diffFormat)
  77.         {
  78.             case 'YEAR' :
  79.                 $dateDiff = sprintf($formats[$diffFormat], $years);
  80.                 break;
  81.             case 'MONTH' :
  82.                 $dateDiff = sprintf($formats[$diffFormat], $months);
  83.                 break;
  84.             case 'DAY' :
  85.                 $dateDiff = sprintf($formats[$diffFormat], $days);
  86.                 break;
  87.             case 'HOUR' :
  88.                 $dateDiff = sprintf($formats[$diffFormat], $hours);
  89.                 break;
  90.             case 'MINUTE' :
  91.                 $dateDiff = sprintf($formats[$diffFormat], $minutes);
  92.                 break;
  93.             case 'SECOND' :
  94.                 $dateDiff = sprintf($formats[$diffFormat], $seconds);
  95.                 break;
  96.         }
  97.         return $dateDiff;
  98.     }
你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!