动态获取每天/每周/每月开始和结束的时间戳

直接上代码先标记下,回头再优化和详解

/**
     *   获取每天的开始和结束时间
     *   @method  getDay
     *   deep
     *   @param   [string]  $year     [年份]
     *   @param   [string]  $weekday  [周]
     *   @return  [array]   $data     [该周内每天的开始和结束时间]
     */
     public function getDay($year,$weekday)
    {
        //一年时间
        $yearFirstDay = $year.'-01-01 00:00:00';
        $yearEndDay   = $year.'-12-31 23:59:59';

        //第一天是星期几
        $week = date('N',strtotime($yearFirstDay));

        $days = 8-$week;
        $firstWeekendDay = date('Y-m-d H:i:s',strtotime($year.'-01-0'.$days.' 23:59:59'));
        $weeks = array();
        $weeks[1]['week_start'] = strtotime($yearFirstDay);
        $weeks[1]['week_end']   = strtotime($year.'-01-0'.$days.' 23:59:59');
        //各周开始和结束时间戳
        $days2 = ((strtotime($yearEndDay)-$weeks[1]['week_end'])/86400)/7;
        $days3 = (int)floor($days2);
        $length = $days3+1;
        for($i=2;$i<=$length;$i++) {
            $weeks[$i]['week_start'] = 1+$weeks[$i-1]['week_end'];
            $weeks[$i]['week_end']   = 604800+$weeks[$i-1]['week_end'];
        }
        //最后一周的开始和结束时间
        $remainder = ((strtotime($yearEndDay)-$weeks[1]['week_end'])/86400)%7;
        if($remainder > 0) {
            $data = [];
            $data['week_start'] = 1+end($weeks)['week_end'];
            $data['week_end']   = ($remainder*86400)+end($weeks)['week_end'];
            array_push($weeks,$data);
        }

        //获取每天的开始和结束时间
        if (array_key_exists($weekday,$weeks)) {

            $wEnd = $weeks[$weekday]['week_end'];

            $data = [];
            $data[1]['start'] = $weeks[$weekday]['week_start'];
            $data[1]['end'] = $data[1]['start'] + 86399;
            for ($i=2; $i < 8; $i++) {
               $data[$i]['start'] = $data[$i-1]['end'] + 1;
               $data[$i]['end'] =   $data[$i-1]['end']+86400;
            }

            return $data;
        };
    }



    /**
     *   动态获取某月的周的时间
     *   @method  getWeekCount
     *   deep
     *   @param   [string]        $year   [年]
     *   @param   [string]        $month  [月]
     *   @return  [array]         $weekArray [每周开始和结束周时间戳]
     */
    public function getWeekCount($year, $month)
    {
        $time = $year . '-' . $month;
        $weekday = date('w', strtotime($time));      //获取1号是周几
        if ($weekday == 1) {      //1号是周一
            $firstWeekDay = 7;
        } elseif ($weekday == 0) {      //1号是周日
            $firstWeekDay = 1;
        } else {
            $firstWeekDay = 8 - $weekday;
        }
        $weekArray = [];
        $endThisweek = mktime(23, 59, 59, $month, $firstWeekDay, $year);
        $weekArray[1] = [strtotime($time), $endThisweek];
        $weeknum = 1 + ceil((date('t', $month) - $firstWeekDay) / 7);   //获取到本月一共有几周

        $beginThisWeek = mktime(0, 0, 0, $month, $firstWeekDay + 1, $year);
        $endThisweek  = mktime(23, 59, 59, $month, $firstWeekDay + 7, $year);
        for ($i = 2; $i <= $weeknum; $i++) {
            $weekArray[$i] = [($beginThisWeek + ($i - 2) * 7 * 86400), ($endThisweek + ($i - 2) * 7 * 86400)];
        }

        //获取每周的时间节点
        $weekArray[$weeknum] = [$weekArray[$weeknum][0], mktime(23, 59, 59, $month, date('t', strtotime($time)), $year)];

        return [$weekArray];
    }


    /**
     *   动态获取每月的开始和结束时间戳
     *   @method  getMonth
     *   deep
     *   @param   [string]    $year      [年份]
     *   @return  [array]     $data     [每月的开始和结束]
     */
    public function getMonth($year)
    {
        $year = str_pad(intval($year), 4, "0", STR_PAD_RIGHT);
        $data = [];
        for ($i=1; $i <=12 ; $i++) {
             $month = sprintf("%02d", intval($i));
             $month>12 || $month<1 ? $month=1 : $month=$month;
             $mStart = strtotime($year . $month . "01000000");
             $mStartCode = date("Y-m-01", $mStart);
             $mEnd = strtotime(date('Y-m-d 23:59:59', strtotime("$mStartCode +1 month -1 day")));
             $data[$i]['mstart'] = $mStart;
             $data[$i]['mend'] = $mEnd;
        }
        return $data;
    }

猜你喜欢

转载自www.cnblogs.com/wangyang0210/p/10101985.html