PHP 年度与周的一些函数

//指定日期所在的周数

 $year = date('Y', strtotime($begin_date));//年度
 $curweek = (int)date('W', strtotime($begin_date)); //当前周数
    //根据年和周数获取当周的开始日期与结束日期(周一到周日)
    function getWeekDate($year,$weeknum){
        $firstdayofyear=mktime(0,0,0,1,1,$year);
        $firstweekday=date('N',$firstdayofyear);
        $firstweenum=date('W',$firstdayofyear);
        if($firstweenum==1){
            $day=(1-($firstweekday-1))+7*($weeknum-1);
            $startdate=date('Y-m-d',mktime(0,0,0,1,$day,$year));
            $enddate=date('Y-m-d',mktime(0,0,0,1,$day+6,$year));
        }else{
            $day=(9-$firstweekday)+7*($weeknum-1);
            $startdate=date('Y-m-d',mktime(0,0,0,1,$day,$year));
            $enddate=date('Y-m-d',mktime(0,0,0,1,$day+6,$year));
        }

        return array($startdate,$enddate);
    }

    /*
     * 获取某星期的开始时间和结束时间
     * time 时间
     * first 表示每周星期一为开始日期 0表示每周日为开始日期
     */
    function getWeekStartAndEnd($time, $first = 1)
    {
        //当前日期
        if (!$time) $time = time();
        $sdefaultDate = date("Y-m-d", $time);
        //$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
        //获取当前周的第几天 周日是 0 周一到周六是 1 - 6
        $w = date('W', strtotime($sdefaultDate));
        //获取本周开始日期,如果$w是0,则表示周日,减去 6 天
        $week_start = date('Y-m-d', strtotime("$sdefaultDate -" . ($w ? $w - $first : 6) . ' days'));
        //本周结束日期
        $week_end = date('Y-m-d', strtotime("$week_start +6 days"));
        return array("week_start" => $week_start, "week_end" => $week_end);
    }


    //根据年度获取该年的总周数
    public function getWeek($year){
        $year_start = mktime(0,0,0,1,1,$year);
        $year_end = mktime(0,0,0,12,31,$year);
        if (date('oW',$year_end)==date('oW',$year_start)){
            return date('W',strtotime('last week',$year_end));
        }else{
            return date('W',$year_end);
        }
    }


    //从当前周开始取7周 $w=0 $k=6
    //从当前周的第3周开始 取7周 $w=3 $k=9
    function get_currentWeek($w,$k){
        $year = date("Y");
        $lastyear = $year -1;
        $lastyear_start = $lastyear . "-01-01";
        $lastyearstartday = strtotime($lastyear_start);
        if (intval(date('N', $lastyearstartday)) != '1') {
            //获取去年第一周的日期
            $lastyearstartday = strtotime("next Monday",strtotime($lastyear_start));
        }
        //获取去年的周数
        $lastyear_week_num =  date("L", $lastyearstartday)==='1'?53:52;
        $week = date('W');
        $year_start = $year . "-01-01";
        $startday = strtotime($year_start);
        if (intval(date('N', $startday)) != '1') {
            //获取今年第一周的日期
            $startday = strtotime("next Monday",strtotime($year_start));
        }
        $year_mondy = date("Y-m-d", $startday);
        $week_array = [];
        for ($i = $week + $w; $i <= $week + $k; $i++) {
            $j = $i -1;
            $label = $year.'年第'.$i.'周';
            $start_date = date("Y-m-d 00:00:00", strtotime("$year_mondy $j week"));
            $end_date = date("Y-m-d 23:59:59", strtotime("$start_date +6 day"));
            //$week_array[$i-$week] = array($label,$start_date,$end_date);
            $week_array[$lastyear_week_num+$i-1]['label'] = $label;
            $week_array[$lastyear_week_num+$i-1]['start_date'] = $start_date;
            $week_array[$lastyear_week_num+$i-1]['end_date'] = $end_date;
            $week_array[$lastyear_week_num+$i-1]['flag'] = 0;
        }
        return $week_array;
    }

    // 每年多少周,每周的起止日期
    function get_weekofyear($year) {
        $year_start = $year . "-01-01";
        $startday = strtotime($year_start);
        if (intval(date('N', $startday)) != '1') {
            //获取年第一周的日期
            $startday = strtotime("next Monday",strtotime($year_start));
        }
        $year_mondy = date("Y-m-d", $startday);
        //获取年的周数
        $num =  date("L", $startday)==='1'?53:52;
        //获取每周的起、止日期
        $week_array = [];
        for ($i = 1; $i <= $num; $i++) {
            $j = $i -1;
            $label = $year.'年第'.$i.'周';
            $start_date = date("Y-m-d 00:00:00", strtotime("$year_mondy $j week"));
            $end_date = date("Y-m-d 23:59:59", strtotime("$start_date +6 day"));
            //$week_array[$i-1] = array($label,$start_date,$end_date);
            $week_array[$i]['label'] = $label;
            $week_array[$i]['start_date'] = $start_date;
            $week_array[$i]['end_date'] = $end_date;
            $week_array[$i]['flag'] = 0;
        }
        return $week_array;
    }

    //从当前周取3周
    function getNext3Week(){
        $year = date("Y");
        $week = date('W');
        $year_start = $year . "-01-01";
        $startday = strtotime($year_start);
        if (intval(date('N', $startday)) != '1') {
            //获取年第一周的日期
            $startday = strtotime("next Monday",strtotime($year_start));
        }
        $year_mondy = date("Y-m-d", $startday);
        $week2 = $week + 2;  //??
        $week3 = $week + 3;
        $label = $year.'年第'.$week3.'周';
        $start_date = date("Y-m-d 00:00:00", strtotime("$year_mondy $week2 week"));
        $end_date = date("Y-m-d 23:59:59", strtotime("$start_date +6 day"));
        $arr_date[0] = $start_date;
        $arr_date[1] = $end_date;
        $arr_date[2] = $label;
        return $arr_date;
    }
   
   
// 获取当前周
function getNowWeek($now)
{
    //当前日期
    $sdefaultDate = $now;
    $first = 1;
    $w = date('w',strtotime($sdefaultDate));
    $week_start = date('Y-m-d',strtotime("$sdefaultDate -".($w ? $w - $first : 6).' days'));
    $week_end = date('Y-m-d',strtotime("$week_start +6 days"));
    $next_week_start = date("Y-m-d",strtotime("+0 day",strtotime($week_start)));
    $next_week_end = date("Y-m-d",strtotime("+0 day",strtotime($week_end)));

    return [
        $next_week_start,
        $next_week_end
    ];
}
// 获取下周一、
function getNextWeek($now)
{
    //当前日期
    $sdefaultDate = $now;
    $first = 1;
    $w = date('w',strtotime($sdefaultDate));
    $week_start = date('Y-m-d',strtotime("$sdefaultDate -".($w ? $w - $first : 6).' days'));
    $week_end = date('Y-m-d',strtotime("$week_start +6 days"));
    $next_week_start = date("Y-m-d",strtotime("+7 day",strtotime($week_start)));
    $next_week_end = date("Y-m-d",strtotime("+7 day",strtotime($week_end)));

    return [
        $next_week_start,
        $next_week_end
    ];
}

 //两日期之间的天数   
function getLessDays($startdate , $enddate)
{
    $startdate = strtotime($startdate);
    $enddate = strtotime($enddate);
    $days = round(($startdate - $enddate)/3600/24) ;
    return $days;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值