Classe d'assistance temporelle implémentée en PHP (exemple de code)

不言
Libérer: 2023-04-04 15:48:02
avant
3359 Les gens l'ont consulté

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(&#39;Y&#39;);
        $startDay = str_replace(&#39;.&#39;,&#39;-&#39;,$timeLabel[0]);
        $endDay = str_replace(&#39;.&#39;,&#39;-&#39;,$timeLabel[$diffDay-1]);
        $startTime = strtotime($startDay." 00:00:00");
        $endTime = strtotime($endDay." 23:59:59");
        return [
            &#39;start_time&#39; => $startTime,
            'end_time' => $endTime,
            'time_label' => $timeLabel,
        ];
    }
Copier après la connexion

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;
    }
Copier après la connexion

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;
    }
Copier après la connexion

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;
    }
Copier après la connexion

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];
    }
Copier après la connexion

Obtenez la plage horaire du même nombre de jours avant et après la date spécifiée

/**
     * 获取指定日期前后相同时间天数的范围时间
     * @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;
    }
Copier après la connexion

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;
    }
Copier après la connexion

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;
    }
Copier après la connexion

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;
    }
Copier après la connexion

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;
    }
Copier après la connexion

Obtenez des millisecondes

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

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);
    }
}
Copier après la connexion

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!

Étiquettes associées:
php
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal