分享3个php获取日历的函数
提供一个日期,获取这个日期的星期对应日历列表,键为星期标示
$month_date='2015-09-25';
$start_time=strtotime($month_date);
$start_week=date('w',$start_time);
$total_month_day=date('t',$start_time);
$weeks_in_month=ceil(($start_week+$total_month_day)/7);
$month_day_arr=[];
$start_month_day=1;
for($i=0;$i<$weeks_in_month;$i++){
for($j=0;$j<7;$j++){
if($i==0&&$j>=$start_week){
$month_day_arr[$i][$j]=$start_month_day;
$start_month_day++;
}elseif($i==0){
$month_day_arr[$i][$j]='';
}else{
$month_day_arr[$i][$j]=$start_month_day;
$start_month_day++;
}
if($start_month_day>$total_month_day){
break;
}
}
}
echo"<pre>";
print_r($month_day_arr);
Array
(
[0]=>Array
(
[0]=>
[1]=>
[2]=>1
[3]=>2
[4]=>3
[5]=>4
[6]=>5
)
[1]=>Array
(
[0]=>6
[1]=>7
[2]=>8
[3]=>9
[4]=>10
[5]=>11
[6]=>12
)
[2]=>Array
(
[0]=>13
[1]=>14
[2]=>15
[3]=>16
[4]=>17
[5]=>18
[6]=>19
)
[3]=>Array
(
[0]=>20
[1]=>21
[2]=>22
[3]=>23
[4]=>24
[5]=>25
[6]=>26
)
[4]=>Array
(
[0]=>27
[1]=>28
[2]=>29
[3]=>30
)
)
    获取指定日期所在月的开始日期与结束日期
/**
*@paramstring$date
*@paramboolean为true返回开始日期,否则返回结束日期
*@returnarray
*@accessprivate
*/
privatefunctiongetMonthRange($date,$returnFirstDay=true){
$timestamp=strtotime($date);
if($returnFirstDay){
$monthFirstDay=date('Y-m-100:00:00',$timestamp);
return$monthFirstDay;
}else{
$mdays=date('t',$timestamp);
$monthLastDay=date('Y-m-'.$mdays.'23:59:59',$timestamp);
return$monthLastDay;
}
}
获取当前星期的日期范围,也就是从星期一到星期日的日期范围。
functiongetWeekRange($date){
$ret=array();
$timestamp=strtotime($date);
$w=strftime('%u',$timestamp);
$ret['sdate']=date('Y-m-d00:00:00',$timestamp-($w-1)*86400);
$ret['edate']=date('Y-m-d23:59:59',$timestamp+(7-$w)*86400);
return$ret;
}
//author:zhxia获取指定日期所在月的开始日期与结束日期
functiongetMonthRange($date){
$ret=array();
$timestamp=strtotime($date);
$mdays=date('t',$timestamp);
$ret['sdate']=date('Y-m-100:00:00',$timestamp);
$ret['edate']=date('Y-m-'.$mdays.'23:59:59',$timestamp);
return$ret;
}
//author:zhxia以上两个函数的应用
functiongetFilter($n){
$ret=array();
switch($n){
case1://昨天
$ret['sdate']=date('Y-m-d00:00:00',strtotime('-1day'));
$ret['edate']=date('Y-m-d23:59:59',strtotime('-1day'));
break;
case2://本星期
$ret=getWeekRange(date('Y-m-d'));
break;
case3://上一个星期
$strDate=date('Y-m-d',strtotime('-1week'));
$ret=getWeekRange($strDate);
break;
case4://上上星期
$strDate=date('Y-m-d',strtotime('-2week'));
$ret=getWeekRange($strDate);
break;
case5://本月
$ret=getMonthRange(date('Y-m-d'));
break;
case6://上月
$strDate=date('Y-m-d',strtotime('-1month'));
$ret=getMonthRange($strDate);
break;
}
return$ret;
}