之前在imooc分享了一个HTML+CSS+ASP 实现日历功能,并且提到有时间再分享一个PHP的。俺的PHP是在慕课上学的,一点一点从基础开始,当然也看了PHP的一些入门书籍,例如:《PHP与MySQL 5程序设计》,最近在跟着学ThinkPHP,感觉框架整体使用还是很爽的,尤其是对数据库操作方面。言归正传,分享一下php实现日历查看功能
代码一:处理上一个月或下一个月
<?php
$weekarray=array("1","2","3","4","5","6","7");//定义星期几的数组
function _post($str){
$val = !empty($_POST[$str]) ? $_POST[$str] : null;
return $val;
}
if (_post("hiddendate")=="")
{
$tdate=date("Y-m-d");
}
else
{
if(_post("hiddenflag")=="1")
{
$tdate=date("Y-m-d",strtotime(_post("hiddendate").'-1 month'));
//date("m",-1,date(_post("hiddendate")));
}
elseif(_post("hiddenflag")=="2")
{
$tdate=date("Y-m-d",strtotime(_post("hiddendate").'+1 month'));
}
}
$date_elements = explode("-" ,$tdate);
?>
代码二:处理日期对应得星期,其实这段代码结构并不复杂,但是由于是面向过程开发,而且我直接把php嵌套到html里所以看着感觉不是很好,希望以后对php的理解提高了,可以把代码优化的更好。ps(主要是我的样式设计时最右边会有border重叠问题,所以不得不多次判断是否为最右边)
<?php
//dim flag,monF,tdmonth,html,tFlag,i,w,dayTag
$flag=0; //满足星期几的标记
$monF=$date_elements[0]."-".$date_elements[1]."-01"; //每月的第一天
$tdmonth=$date_elements[1]; //存放当前是第几月,用来判断当前日期是否属于这个月份,不属于则跳出
$tFlag=0; //跳出第1个for循环后,跳出第2个for循环的标记
$html=""; //存放生成的html代码
for($i=1;$i<=6;$i++){
$html=$html."<div class = 'cont_all'>";
for($w=1;$w<=7;$w++){
if($weekarray[date('w',strtotime($monF))]==$w) //判断当前是星期几
{
if ($flag==0)
{
$flag=1;
}
}
$date_monF = explode("-" ,$monF);//将每月的第一天拆分成,年、月、日
if ($flag==1){
if ($monF==date("Y-m-d"))
{
$dayTag="<div class = 'cont_dayTag'><b>".date('d',strtotime($monF))."</b></div>";
}
else if($monF==$tdate){
$dayTag="<div class='cont_dayTag_else'>".date('d',strtotime($monF))."</div>";
}
else{
$dayTag="<div class='cont_dayTag_end'>".date('d',strtotime($monF))."</div>";
}
if($date_monF[1] != date('m'))
{
if ($date_monF[2]== date('d')){
if ($w == 7)//判断是否是星期六,考虑到最右边的css样式'
{
$html=$html."<div class = 'cont_dayTag_right_s' >".$dayTag."</div>";
}
else
{
$html=$html."<div class = 'cont_dayTag_all_s' >".$dayTag."</div>";
}
}
else if($monF == $tdate){
if ($w == 7)
{
$html=$html."<div class = 'cont_dayTag_right_s' >".$dayTag."</div>";
}
else
{
$html=$html."<div class = 'cont_dayTag_all_s' >".$dayTag."</div>";
}
}
else{
if($w == 7)
{
$html=$html."<div class = 'cont_dayTag_right_s' >".$dayTag."</div>";
}
else
{
$html=$html."<div class = 'cont_dayTag_all_s' >".$dayTag."</div>";
}
}
}
else
{
if ($date_monF[2]== date('d')){
if ($w == 7)//判断是否是星期六,考虑到最右边的css样式'
{
$html=$html."<div class = 'cont_dayTag_right' >".$dayTag."</div>";
}
else
{
$html=$html."<div class = 'cont_dayTag_all' >".$dayTag."</div>";
}
}
else if($monF == $tdate){
if ($w == 7)
{
$html=$html."<div class = 'cont_dayTag_right_s' >".$dayTag."</div>";
}
else
{
$html=$html."<div class = 'cont_dayTag_all_s' >".$dayTag."</div>";
}
}
else{
if($w == 7)
{
$html=$html."<div class = 'cont_dayTag_right_s' >".$dayTag."</div>";
}
else
{
$html=$html."<div class = 'cont_dayTag_all_s' >".$dayTag."</div>";
}
}
}
$monF = date("Y-m-d",strtotime($monF.'+1 day'));
}
else{
if ($w == 7)
{
$html=$html."<div class = 'cont_dayTag_right_s'></div>";
}
else
{
$html=$html."<div class = 'cont_dayTag_all_s'></div>";
}
}
if (date('m',strtotime($monF))!=$tdmonth)
{
$tFlag=1;
break;
}
}
$html=$html."</div>";
if ($tFlag==1)
{
break;
}
}
?>
<?php echo $html; ?>
关于样式的代码请参考 Html+css+Asp 实现日历功能。
之前的代码格式确实很差,这点我在写php的时候也发现了。
功能最后可以用mvc实现,那样的话代码二看起来就好多了。
日历功能主要用到了php中的date()函数,以及两个for循环的逻辑。
再此,感谢慕课网能够提供这么多免费开源的优秀课程。
与慕课的小伙伴们共勉。