PHP获取月的每周开始结束时间以及年的开始结束时间

基本使用

//当前时间
echo date("Y-m-d H:i:s",time());
 
//明天此时时间
echo date("Y-m-d H:i:s",strtotime("+1 day"));
 
//指定时间
echo date("Y-m-d H:i:s",strtotime("-1 day"));
 
//下星期时间
echo date("Y-m-d H:i:s",strtotime("+1 week"))
 
//上个星期此时时间
echo date("Y-m-d H:i:s",strtotime("-1 week"));
 
//下星期几时间
echo date("Y-m-d H:i:s",strtotime("next Thursday"));
 
//指定时间
echo date("Y-m-d H:i:s",strtotime("last Thursday"));
今天
 
$startDate = mktime(0,0,0,date("m"),date("d"),date("Y"));
$endDate = mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
 
 
昨天
 
$startDate = mktime(0,0,0,date("m"),date("d")-1,date("Y"));
$endDate = mktime(0,0,0,date("m"),date("d"),date("Y"))-1;
 
 
明天
 
$startDate = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
$endDate = mktime(0,0,0,date("m"),date("d")+2,date("Y"))-1;
 
 
本周
 
$w = date("w");
$startDate = mktime(0,0,0,date("m"),date("d")-$w+1,date("Y"));
$endDate=mktime(23,59,59,date('m'),date('d')-date('w')+7,date('Y'));
 
 
上周
 
$startDate=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));
$endDate=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));
 
 
下周
 
$startDate=mktime(0,0,0,date('m'),date('d')-date('w')+7+1,date('Y'));
$endDate=mktime(23,59,59,date('m'),date('d')-date('w')+7+7,date('Y'));
 
 
本月
 
$startDate = mktime(0,0,0,date("m"),1,date("Y"));
$endDate = mktime(23,59,59,date('m'),date('t'),date('Y'))-1;
 
 
上月
 
$startDate = mktime(0,0,0,date("m")-1,1,date("Y"));
$endDate = mktime(0,0,0,date("m"),1,date("Y"))-1;
 
 
下月
 
$startDate = mktime(0,0,0,date("m")+1,1,date("Y"));
$endDate = mktime(0,0,0,date("m")+2,1,date("Y"))-1;
 
 
本季度
 
$getMonthDays = date("t",mktime(0, 0 , 0,date('n')+(date('n')-1)%3,1,date("Y")));//本季度未最后一月天数 
echo '<br>本季度:<br>'; 
echo date('Y-m-d H:i:s', mktime(0, 0, 0,date('n')-(date('n')-1)%3,1,date('Y'))),"\n"; 
echo date('Y-m-d H:i:s', mktime(23,59,59,date('n')+(date('n')-1)%3,$getMonthDays,date('Y'))),"\n"; 
$season = ceil((date('n'))/3);//当月是第几季度
echo '<br>本季度起始时间:<br>';
echo date('Y-m-d H:i:s', mktime(0, 0, 0,$season*3-3+1,1,date('Y'))),"\n";
echo date('Y-m-d H:i:s', mktime(23,59,59,$season*3,date('t',mktime(0, 0 , 0,$season*3,1,date("Y"))),date('Y'))),"\n";
$season = ceil((date('n'))/3)-1;//上季度是第几季度
echo '<br>上季度起始时间:<br>';
echo date('Y-m-d H:i:s', mktime(0, 0, 0,$season*3-3+1,1,date('Y'))),"\n";
echo date('Y-m-d H:i:s', mktime(23,59,59,$season*3,date('t',mktime(0, 0 , 0,$season*3,1,date("Y"))),date('Y'))),"\n";
 
 
今年
 
$startDate = mktime(0,0,0,1,1,date("Y"));
$endDate = mktime(0,0,0,1,1,date("Y")+1)-1;
结果如:
 
1483200000
1514735999
 
格式化:
 
2017-01-01 00:00:00
2017-12-31 23:59:59
 

 

 

日期函数基本使用

        $a = "2022-12-10 10:00:00";
        print_r($a);        echo PHP_EOL; // 2022-12-10 10:00:00
        print_r(date('Y-m-d H:i:s',strtotime("$a + 1 days")));        echo PHP_EOL; // 2022-12-11 10:00:00
        print_r(date('Y-m-d H:i:s',strtotime("$a + 2 days")));        echo PHP_EOL; // 2022-12-12 10:00:00
        print_r(date('Y-m-d H:i:s',strtotime("$a + 3 days")));        echo PHP_EOL; // 2022-12-13 10:00:00
        print_r(date('Y-m-d H:i:s',strtotime("$a + 1 weeks")));       echo PHP_EOL; // 2022-12-17 10:00:00
        print_r(date('Y-m-d H:i:s',strtotime("$a + 2 weeks")));       echo PHP_EOL; // 2022-12-24 10:00:00
        print_r(date('Y-m-d H:i:s',strtotime("$a + 1 weeks 2 days - 4 hours + 1 minutes + 2 seconds")));       echo PHP_EOL; // 2022-12-19 06:01:02
        print_r(date('Y-m-d H:i:s',strtotime("$a next Thursday")));       echo PHP_EOL; // 2022-12-15 00:00:00
        print_r(date('Y-m-d H:i:s',strtotime("$a last Monday")));       echo PHP_EOL; // 2022-12-05 00:00:00
        print_r(date('Y-m-d H:i:s',strtotime("$a + 1 months")));       echo PHP_EOL; // 2023-01-10 10:00:00
        // 季度 --> 当前月所属季度的开始结束日期 now 2022-12-26 10:30:00
        $quarter = ceil((date('m'))/3);
        $time_amp = [
            'start' => date('Y-m-d H:i:s',mktime(0, 0, 0,$quarter*3-2,1,date('Y'))),// 2022-10-01 00:00:00
            'over_1' => date('Y-m-d H:i:s',mktime(0, 0, 0,$quarter*3+1,1,date('Y'))),// 2023-01-01 00:00:00
            'over_2' => date('Y-m-d H:i:s',mktime(0, 0, 0,$quarter*3+1,1,date('Y'))-1),// 2022-12-31 23:59:59
        ];
        print_r($time_amp);
        /*
         * 年year 月month 日day 时hour 分minute 秒second 周week
         * 星期一:Mon.=Monday 星期二:Tues.=Tuesday 星期三:Wed.=Wednesday 星期四:Thur.=Thursday 星期五:Fri.=Friday 星期六:Sat.=Saturday 星期天:Sun.=Sunday
         * 一 月:January 简写: Jan  二 月:February 简写:Feb     三 月:March 简写:Mar
         * 四 月:April 简写:Apr     五 月:May 简写:May          六 月:June 简写:Jun
         * 七 月:July 简写:Jul      八 月:August 简写:Aug       九 月:September 简写:Sep
         * 十 月:October 简写:Oct   十一月:November 简写:Nov    十二月:December 简写:Dec
         */

某一月从第一周到最后一周

        $month = '2022-11';
        $year_start = date("Y-m-01",strtotime($month));
        $year_end = date("Y-m",strtotime($month)).'-'.date('t',strtotime($month));
        print_r(compact('year_start','year_end')); // 当月第一天 当月最后一天
        $start_day = strtotime($year_start);
        // 如果当月第一天是不是周一获取下一个周一的时间戳
        if (intval(date('N', $start_day)) != '1') {
            $start_day = strtotime("next monday", strtotime($year_start));
        }
        $year_mon_dy = date("Y-m-d", $start_day);
        $end_day = strtotime($year_end);
        // 如果当月最后一天不是周日获取下一个周日的时间戳
        if (intval(date('N', $end_day)) != '7') {
            $end_day = strtotime("next sunday", strtotime($year_end));
        }
        $year_sun_dy = date('Y-m-d',$end_day);
        $day_diff = (((strtotime($year_sun_dy) - strtotime($year_mon_dy))/86400) + 1) / 7;
        $start_ymd = [];
        $sql = [];
        for ($i=0;$i<$day_diff;$i++){
            $value = date('Y-m-d',strtotime($year_mon_dy) + $i * 86400 * 7 );
            $start_ymd[$i+1] = $value;
            $sql[$i+1] = Db::name('example')->whereWeek('create_time',$value)->fetchSql(true)->find(); // 框架tp6 create_time 字段 datetime格式
        }
        print_r($start_ymd);
        print_r($sql);

某一年从第一周到最后一周

// 年周
        $year = '2023';
        $year_start = $year . "-01-01";
        $year_end = $year . "-12-31";

        $start_day = strtotime($year_start);
        // 如果当年第一天是不是周一获取下一个周一的时间戳
        if (intval(date('N', $start_day)) != '1') {
            $start_day = strtotime("next monday", strtotime($year_start)); //获取年第一周的日期
        }
        $year_mon_dy = date("Y-m-d", $start_day); //获取年第一周的日期

        $end_day = strtotime($year_end);
        // 如果当年最后一天不是周日获取下一个周日的时间戳
        if (intval(date('N', $end_day)) != '7') {
            $end_day = strtotime("next sunday", strtotime($year_end));
        }
        // 获取年最后一个周日是第几周 52
        $num = intval(date('W', $end_day));
        $week_array = [];
        $sql = [];
        for ($i = 1; $i <= $num; $i++) {
            $j = $i -1;
            $start_date = date("Y-m-d", strtotime("$year_mon_dy $j week "));
            $end_date = date("Y-m-d", strtotime("$start_date +6 day"));
            $week_array[$i] = [$start_date,$end_date];
            $sql[$i] = Db::name('example')->whereWeek('create_time',$start_date)->fetchSql(true)->find(); // 框架tp6 create_time 字段 datetime格式
        }
        print_r($week_array);
        print_r($sql);

传入年获取年对应月如果为当年当月展示当月上月

// 传入年份获取月
        $year = '2022';
        $res = [];
        if ($year == date('Y',time())){
            $year_month = date('Y-m',time());
            $now_month_num = date('n',strtotime($year_month));
            for ($i=1;$i<=$now_month_num;$i++){
                // 判断当前年展示当月上月
                if ($i == $now_month_num){$name = '当月';}elseif ($i == $now_month_num-1){$name = '上月';}else{$name = $i.'月';}
                $value = $year.'-'.date('m',strtotime($year.'-'.$i));
                $start_over = [
                    'start' => $year.'-'.date('m-d 00:00:00',strtotime($value)),
                    'over' => $year.'-'.date('m-d H:i:s',strtotime("$value + 1 months - 1 seconds")),
                ];
                $sql = Db::name('example')->whereMonth('create_time',$value)->fetchSql(true)->find(); // 框架tp6 create_time 字段 datetime格式
                $item = compact('name','value','start_over','sql');
                array_unshift($res,$item);
            }
        }else{
            for ($i=1;$i<=12;$i++){
                $name = $i.'月';
                $value = $year.'-'.date('m',strtotime($year.'-'.$i));
                $start_over = [
                    'start' => $year.'-'.date('m-d 00:00:00',strtotime($value)),
                    'over' => $year.'-'.date('m-d H:i:s',strtotime("$value + 1 months - 1 seconds")),
                ];
                $sql = Db::name('example')->whereMonth('create_time',$value)->fetchSql(true)->find(); // 框架tp6 create_time 字段 datetime格式
                $item = compact('name','value','start_over','sql');
                array_unshift($res,$item);
            }
        }
        print_r($res);

xxxx年到xxx年 查询统计区间

//
        $start = '2019';
        $over = date('Y');
        $diff_arr = date_diff(date_create($over.'-01-01 00:00:00'),date_create($start.'-01-01 00:00:00'));
        $diff = $diff_arr->format('%y');
        $res = [];
        for ($i=0;$i<$diff;$i++){
            $year = intval($start) + $i;
            $start = $year.'-'.'01-01 00:00:00';
            $over = date('Y-m-d H:i:s',strtotime("$start + 1 years - 1 seconds"));
            $sql = Db::name('example')->whereYear('create_time',$year)->fetchSql(true)->find(); // 框架tp6 create_time 字段 datetime格式
            array_push($res,compact('year','start','over','sql'));
        }
        print_r($res);

 

posted @ 2023-06-26 15:00  一个人的孤独自白  阅读(332)  评论(0编辑  收藏  举报