Le contenu de cet article concerne la classe d'aide temporelle (exemple de code) implémentée en PHP. Elle a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Dans le processus de travail, nous rencontrons souvent diverses opérations basées sur le temps, nous avons donc encapsulé une classe d'outils d'aide pour améliorer le taux de réutilisation du code
Fonctions principales
Obtenez des périodes continues basées sur le nombre de jours d'intervalle
/** * 根据相差的天数获取所有连续的时间段 * @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, ]; }
Obtenez des périodes continues basées sur deux 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; }
Obtenez l'heure de début et l'heure de fin du mois en cours en fonction de la date
/** * 根据日期获取本月的开始时间和结束时间 * @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; }
Style de formatage convivial
/** * 时间友好型提示风格化(即微博中的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; }
Basé sur la date Obtenez le jour de la semaine
/** * 获取星期几 * @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; }
Obtenir le nombre de jours de différence entre deux 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; }
Selon la date et le nombre de jours spécifiés, obtenir la date de fin
/** * 根据日期和相差的天数获取结束的天数 * @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; }
Jugez si les deux dates sont le même jour
/** * 判断两个时间是否同一天 * @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; }
Convertissez les secondes en 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; }
Obtenez des millisecondes
/** * 获取时间的毫秒数 * @return float */ public static function millisecond() { list($msec, $sec) = explode(' ', microtime()); return (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000); }
Annexe : Code d'aide horaire complet
'%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); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!