使用php动态生成一个日历,附源码。【简单实用】

17-02-08 11:56 字数 668 阅读 4549 已编辑

日历在web开发中是非常常用的一个功能,网上搜也能找到一大堆日历组件,大部分是js组件。

因为再开发过程中需要使用到日历的功能,又不想下载什么日历组件。所以就自己动手写了一个简单的php生成日历的功能。

源码如下:

/*
 * @动态生成一个日历
 * @param 日期[2016-07-01|2017-02-01]
 * @return table
 */
function create_calendar($month){

    #初始化
    $calendar = '';
    #表头
    $week_arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
    #本月共多少天
    $this_month_days = (int)date('t',strtotime($month));
    #本月1号星期几
    $this_month_one_n = (int)date('w', strtotime($month));
    //表头
    $calendar .= '<div class="table-responsive"><table class="table table-bordered"><thead><tr>';
    foreach ($week_arr as $k => $v){
        if($k == 0){
            $class = ' class="sunday"';
        }elseif ($k == 6){
            $class = ' class="saturday"';
        }else{
            $class = '';
        }
        $calendar .= '<th'.$class.'>'.$v.'</th>';
    }
    $calendar .= '</tr></thead><tbody>';
    //表身
    #计算本月共几行数据
    $total_rows = ceil(($this_month_days - (7 - $this_month_one_n)) / 7) + 1;
    $number = 1;
    $flag = 0;
    for ($row = 1;$row <= $total_rows;$row++){
        $calendar .= '<tr>';
        for ($week = 0;$week <= 6;$week ++){

            if($number < 10){
                $numbera = '0'.$number;
            }else{
                $numbera = $number;
            }

            if(date('Ym',strtotime($month)) .$numbera == intval(date('Ymd'))){
                $cell_id = ' id="today"';
            }else{
                $cell_id = '';
            }
            if($number <= $this_month_days){
                if($row == 1){
                    if($week >= $this_month_one_n){
                        $calendar .= '<td'.$cell_id.'>'.$number.'</td>';
                        $flag = 1;
                    }else{
                        $calendar .= '<td></td>';
                    }
                }else{
                    $calendar .= '<td'.$cell_id.'>'.$number.'</td>';
                }
                if($flag){
                    $number ++;
                }
            }else{
                $calendar .= '<td></td>';
            }
        }
        $calendar .= '</tr>';
    }

    $calendar .= '</tbody></table></div>';


    return $calendar;
}

id=today的就是今天的日期。

使用方法

参数直接传一个日期,date类型的。如要用17年2月份的日历,则参数传2017-02-01;如果要17年1月的则传参数2017-01-01

$calendar = create_calendar('2017-02-01');
echo $calendar;

结果如下

简单的日历

样式的话需要自己手动写一下,或者直接使用bootstrap。具体效果可以参考本站的签到日历。非常简单有用的小函数。

0人点赞>
关注 收藏 改进 举报
0 条评论
排序方式 时间 投票
快来抢占一楼吧
请登录后发表评论
站长 @ 十七度
文章
380
粉丝
23
喜欢
191
收藏
31
排名 : 1
访问 : 128.49万
私信