这是一个轮子,主要是项目中常用的对时间操作的一些功能函数封装。
一、根据相差的天数获取连续的时间段。
- /**
- * 根据相差的天数获取所有连续的时间段
- * @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('Y');
- $startDay = str_replace('.','-',$timeLabel[0]);
- $endDay = str_replace('.','-',$timeLabel[$diffDay-1]);
- $startTime = strtotime($startDay." 00:00:00");
- $endTime = strtotime($endDay." 23:59:59");
- return [
- 'start_time' => $startTime,
- 'end_time' => $endTime,
- 'time_label' => $timeLabel,
- ];
- }
二、根据两个日期获取连续的时间段。
- /**
- * 根据开始和结束时间获取所有连续的时间段
- * @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;
- }