教你做一个简单的php日历
在最近的项目中,数据需要按日历显示。网上有很多JS插件。后来为了有更大的控制力,我决定自己做一个日历展示。如下图所示:
1.计算数据1。new是一个日历类。
2.在两个下拉框中初始化数据,年和月。
3.初始化要搜索的年和月。
4.计算日历中每天的数据信息,包括css和天数。
?php require _ once ' calendar.php$util=新日历();$years=array(2012、2013、2014、2015、2016);//选择用户定义的$ months=该年的数组(1,2,3,4,5,6,7,8,9,10,11,12);//月数组//获取post if的年份数据(空($ _ post[' DDL year '])){ $ year=date(' y ');} else { $ year=$ _ POST[' ddlYear '];}//获取post if的月份数据(空($ _ post[' DDL month ']){ $ month=date(' n ');} else { $ month=$ _ POST[' ddlMonth '];} $ calendar=$ util-threshold($ year,$ month);//获取每个边界值$ cache=$ util-cache($ calendar);//计算日历$ draw的天数和样式=$ util-draw($ cache);//画一张表,在表中设置tr和td?二、html显示1。休息日的背景颜色不同,不是当前搜索年份的日子的字体颜色也不同。
2.初始化div中的年、月下拉框,选择当前要搜索的年、月。
3.数据已经计算出来,属于哪个td,tr也已经做了。直接把表格打印出来就行了。
div style=' padd :20 px ' select name=' ddlYear '?PHP foreach($年作为$data) {?选项值='?php echo $data?PHP if($ year==$ data)echo ' selected=' selected '?php echo $数据?/option?php }?/select select name='ddlMonth '?PHP foreach($月作为$data) {?选项值='?php echo $data?PHP if($ month==$ data)echo ' selected=' selected '?php echo $数据?/option?php }?/select input type=' submit ' value=' modify '/div table width=' 100% ' cell spacing=' 0 ' class=' table _ calendar ' the d class=' f14 ' TR TD width=' 16% ' day/Td width=' 14% ' I/TD TD width=' 14% ' II/TD TD TD width=' 14% ' III/TD width=' 14% ' IV/TD TD TD width=' 14% ' V/TD TD TD TD width=' 14% ' VI/TD/TR/PHP foreach($ draw as $ draw){?tr?php foreach($draw as $date) {?td类='?php echo $date['tdclass']?'p类='?php echo $date['pclass']?'?php echo $date['day']?/p /td?php }?/tr?php }?/t body/表三。日历类1。阈值法生成日历的各种边界值。
1)计算本月的总天数。
2)在本月的第一天和最后一天计算星期几。
3)计算日历中的第一个和最后一个日期。
/* * * @已弃用生成日历的各个边界值* @ param string $ year * @ param string $month * @ return array */function threshold($ year,$month) { $firstDay=mktime(0,0,0,$ month,1,$ year);$lastDay=strtotime(' 1个月-1天,$第一天);//取得天数$days=日期(' t ',$第一天);//取得第一天是星期几$ firstDayOfWeek=日期(' N ',$第一天);//获得最后一天是星期几$lastDayOfWeek=日期(' N ',$ last day);//上一个月最后一天$ lastMonthDate=strtotime('-1天',$第一天);$ LastMonhofLastDay=date(' d ',$ LastMonthDate);//下一个月第一天$nextMonthDate=strtotime(' 1天,$最后一天);$ next monthoffirst day=strtotime(' 1天',$ last day);//日历的第一个日期if($ first day ofweek==7)$ first date=$ first day;else $firstDate=strtotime('-').$firstDayOfWeek .日',$第一天);//日历的最后一个日期if($ lastDayOfWeek==6)$ last date=$ last day;else if($ lastDayOfWeek==7)$ last date=strtotime(' 6 day ',$ last day);else $lastDate=strtotime(').(6-$lastDayOfWeek).日',$最后一天);返回数组(' days'=$days,' first day fweek '=$ first day fweek,' last day fweek '=$ last day fweek,' last monthofflastday '=$ last monthofflastday,' firstDate'=$firstDate,' lastDate'=$lastDate,' year'=$year,' month '=$ month);}2、计算方法,计算日历的天数与样式
1)将上个月的天数计算出来,本月第一天的星期不是星期天的话,就需要根据上个月的最后一天计算
2)将本月的天数遍历出来,如果是休息天就加上特殊的钢性铸铁样式
3)将下个月的天数计算出来,分三种情况,星期日、星期六和工作日
/* * * @作者Pwstrick * @param数组$日历通过阈值方法计算后的数据* @已弃用计算日历的天数与样式*/函数calculate($ calendar){ $ days=$ calendar[' days '];$ first day fweek=$ calendar[' first day fweek '];//本月第一天的星期$ lastDayOfWeek=$ calendar[' lastDayOfWeek '];//本月最后一天的星期$ LastMontofLastDay=$ calendar[' LastMontofLastDay '];//上个月的最后一天$ year=$ calendar[' year '];$ month=$ calendar[' month '];$ date=array();if($firstDayOfWeek!=7){ $ lastDays=array();$ current=$ lastMonthOfLastDay//上个月的最后一天对于($ I=0;$ I $ first dayofweek $ I){ array _ push($ last days,$ current);//添加上一个月的日期天数$ current-;} $ last days=array _ reverse($ last days);//反序foreach($最后几天作为$ index=$ day){ array _ push($ date,array('day'=$day,' t class '=($ index==0?rest': ' '),' pclass '=' outter ');} } //本月日历信息for($ I=1;$ I=$ days $ I){ $ IsRest=$ this-_ CheckIsRest($年,$月,$ I);//判断是否是休息天array _ push($ date,array('day'=$i,' tdclass'=($isRest?rest': ' '),' pclass '=' ');} //下月日历信息if($lastDayOfWeek==7) {//最后一天是星期日$ length=6;} elseif($lastDayOfWeek==6) {//最后一天是星期六$ long=0;} else { $ length=6-$ lastDayOfWeek;} for($ I=1;$ i=$ length$ I){ array _ push($ date,array('day'=$i,' t class '=($ I==$ length?rest': ' '),' pclass '=' outter ');}返回$ dates } 3,抽签方法,画表格,设置桌子中的tr与任务描述
1)数据将要用桌子标签来显示,所以这里要将各个tr下面的任务描述排列好
2)$索引% 7==0计算表格每行的第一列
3)$ index % 7==6 | | $ index==($ length-1)计算每行的最后一列,或$计算的最后一个数据
4)将中间行添加到$tr中,就是每一行的排列
/* * * @作者Pwstrick * @param数组$ caculate通过计算方法计算后的数据* @已弃用画表格,设置桌子中的tr与td */函数draw($ calculate){ $ tr=array();$ length=count($ calculate);$ result=array();foreach($计算为$ index=$ date){ if($ index % 7==0){//第一列$tr=数组($ date);} else if($ index % 7==6 | | $ index==($ length-1)){ array _ push($ tr,$ date);array_push($result,$ tr);//添加到返回的数据中$ tr=array();//清空数组列表}else { array_push($tr,$ date);} }返回$ result}通过本文大家应该知道日历制作的方法了,那就趁热打铁,做一个属于自己日历。
附源码:教大家制作简单的服务器端编程语言(专业超文本预处理器的缩写)日历
版权声明:教你做一个简单的php日历是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。