各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

PHP实现的时间帮助类(代码示例)

管理员 2023-09-05
PHP
146

PHP实现的时间帮助类(代码示例)

内容导读

收集整理的这篇技术教程文章主要介绍了PHP实现的时间帮助类(代码示例),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含13881字,纯文字阅读大概需要20分钟

内容图文

本篇文章给大家带来的内容是关于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('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;    }

根据日期获取是星期几

/**     * 获取星期几     * @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;    }

获取毫秒数

/**     * 获取时间的毫秒数     * @return float     */    public static function millisecond() {        list($msec, $sec) = explode(' ', microtime());        return (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);    }

附录:完整的时间帮助类代码

<?php/** * Created by PhpStorm. * User: Auser * Date: 2017/7/16 * Time: 20:47 */namespace AppHttpHelper;use IlluminateSupportFacadesInput;use InterventionImageFacadesImage;use MockeryException;class TimeHelper{    /**     * 根据相差的天数获取所有连续的时间段     * @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;    }    /**     * 获取两个月份之间连续的月份     * @param $start     * @param $end     * @return array     */    public static function  prDates($start, $end) { // 两个日期之间的所有日期        $time_start = strtotime($start); // 自动为00:00:00 时分秒 两个时间之间的年和月份        $time_end = strtotime($end);        $monarr[] = $start; // 当前月;        while( ($time_start = strtotime('+1 month', $time_start)) <= $time_end){            array_push($monarr,date('Y-m', $time_start));// 取得递增月        }        return $monarr;    }    /**     * 时间友好型提示风格化(即微博中的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;    }    /**     * 获取星期几     * @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); }}

以上就是PHP实现的时间帮助类 (代码示例)的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的PHP实现的时间帮助类(代码示例)全部内容,希望文章能够帮你解决PHP实现的时间帮助类(代码示例)所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部