PHP提供了date()函数,该函数提供了丰富的日期处理功能。现在需要获得的数据有两个,第一个是当月的总天数;第二个是该月的第一天所在星期中的第几天,数字表示0(表示星期天)到6(表示星期六)。通过date()函数可以很容易获得上面的数据。
1. <?php
2.//date()函数的基本用法
3. $year = date('Y'); //获得年份,例如2006
4. $month = date('n'); //获得月份,例如04
5. $day = date('j'); //获得日期,例如3
6. ?>
通过mktime()函数和date()函数获得当月的总天数。 1.//获得当月的总天数
2. $daysInMonth = date("t",mktime(0,0,0,$month,1,$year));
同样是组合使用mktime()函数和date()函数,获得该月的第一天所在星期中的第几天,数字表示0(表示星期天)到6(表示星期六)。 1.//获得每个月的第一天,例如4
2. $firstDay = date("w", mktime(0,0,0,$month,1,$year));
现在重新来观察下这个日历表格,我们发现,表格中的值是从1到x(当月的总天数)。我们可以形象地通过一个坐标来表示每一个位置(x,y),表格的起始位置是(0,0),结束位置是(5,4),当月第一天的起始位置是(0,3)。现在来创建一个二维数组来存储对应的日期。
(1)需要获得表格的数目。
1.//计算数组中的日历表格数
2. $tempDays = $firstDay + $daysInMonth;
(2)需要算出该月一共有几周(即表格的行数)。 1.//获得表格行数
2. $weeksInMonth = ceil($tempDays/7);
(3)在获得行数的变量之后,创建一个二维数组用来存放日期信息,代码如下: 1. <?php
2. for($j=0;$j
3.{
4. for($i=0;$i<7
5. ;$i++)
6. {
7. $counter ++;
8. $week [$j] [$i] = $counter;
9. }
10.}
11. ?>
(4)细心的读者可能发现,上面的代码其实是一个雏型,因为它处理出来的数据并没有过滤那些空白的表格单元。下面来继续改造下这段代码,加入过滤和构造的部分。改造后的代码如下: 1. <?php
2.//创建日期二维数组
3. for($j = 0; $j < $weeksInMonth; $j ++) {
4. for($i = 0; $i < 7; $i ++) {
5. $counter ++;
6. $week [$j] [$i] = $counter;
7. //日期偏移量
8. $week [$j] [$i] -= $firstDay;
9. if (($week [$j] [$i] < 1) || ($week [$j] [$i] > $daysInMonth)) {
10. $week [$j] [$i] = "";
11. }
12. }
13.}
14. ?>
(5)在获得正确的二维数组之后,就可以通过foreach()函数将存储的日期信息遍历出来,同时插入HTML标签创建日期,代码如下: 1. <?php
2. $year = date ( 'Y' ); //获得年份, 例如: 2006
3. $month = date ( 'n' ); //获得月份, 例如: 04
4. $day = date ( 'j' ); //获得日期, 例如: 3
5. $firstDay = date ( "w", mktime ( 0, 0, 0, $month, 1, $year ) );
6. //获得当月第一天