日历在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 .= '
foreach ($week_arr as $k => $v){
if($k == 0){
$class = ' class="sunday"';
}elseif ($k == 6){
$class = ' class="saturday"';
}else{
$class = '';
}
$calendar .= '
'.$v.'';}
$calendar .= '
';//表身
#计算本月共几行数据
$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 .= '
';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 .= '
'.$number.'';$flag = 1;
}else{
$calendar .= '
';}
}else{
$calendar .= '
'.$number.'';}
if($flag){
$number ++;
}
}else{
$calendar .= '
';}
}
$calendar .= '
';}
$calendar .= '
return $calendar;
}
id=today的就是今天的日期。
使用方法
参数直接传一个日期,date类型的。如要用17年2月份的日历,则参数传2017-02-01;如果要17年1月的则传参数2017-01-01。
$calendar = create_calendar('2017-02-01');
echo $calendar;
结果如下
样式的话需要自己手动写一下,或者直接使用bootstrap。具体效果可以参考本站的签到日历。非常简单有用的小函数。