Home > Article > Backend Development > Time helper class implemented in PHP (code example)
The content of this article is about the time help class (code example) implemented in PHP. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
We often encounter various time-based operations during the work process, so a helper tool class is encapsulated to improve the code reuse rate
Main functions
Get a continuous time period based on the number of days apart
/** * 根据相差的天数获取所有连续的时间段 * @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, ]; }
Get a continuous time period based on two dates
/** * 根据开始和结束时间获取所有连续的时间段 * @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; }
Based on Date gets the start time and end time of the current month
/** * 根据日期获取本月的开始时间和结束时间 * @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; }
Time-friendly formatting style
/** * 时间友好型提示风格化(即微博中的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; }
Gets the day of the week based on the 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; }
Get the number of days difference between two dates
/** * 获取两个日期之间相差的天数 * @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; }
According to the specification Date and number of days, get the end date
/** * 根据日期和相差的天数获取结束的天数 * @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; }
Judge whether two dates are the same day
/** * 判断两个时间是否同一天 * @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; }
Convert seconds to minutes
/** * 转换秒钟为分钟 * @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; }
Get milliseconds
/** * 获取时间的毫秒数 * @return float */ public static function millisecond() { list($msec, $sec) = explode(' ', microtime()); return (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000); }
Appendix: Complete time help class code
'%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; } /** * 获取星期几 * @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 $time * @return int */ public static function dateTime($time) { return strtotime(date('Y-m-d', $time)); } /** * @param $num * @return string */ public static function getFriendlyNumber($num) { if ($num >= 10000) { $num = round($num / 10000 ,1) .'万'; } else { $num = $num; } return $num; } /** * 判断两个时间是否同一天 * @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; } /** * 获取时间的毫秒数 * @return float */ public static function millisecond() { list($msec, $sec) = explode(' ', microtime()); return (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000); } }
The above is the detailed content of Time helper class implemented in PHP (code example). For more information, please follow other related articles on the PHP Chinese website!