偶然的你
PHP提供了date()函数,该函数提供了丰富的日期处理功能。现在需要获得的数据有两个,第一个是当月的总天数;第二个是该月的第一天所在星期中的第几天,数字表示0(表示星期天)到6(表示星期六)。通过date()函数可以很容易获得上面的数据。1. <?php2. //date()函数的基本用法3. $year = date('Y'); //获得年份,例如20064. $month = date('n'); //获得月份,例如045. $day = date('j'); //获得日期,例如36. ?>通过mktime()函数和date()函数获得当月的总天数。 1.//获得当月的总天数2. $daysInMonth = date("t",mktime(0,0,0,$month,1,$year));同样是组合使用mktime()函数和date()函数,获得该月的第一天所在星期中的第几天,数字表示0(表示星期天)到6(表示星期六)。 1.//获得每个月的第一天,例如42. $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. <?php2. for($j=0;$j<$weeksInMonth;$j++)3.{4. for($i=0;$i<75. ;$i++)6. {7. $counter ++;8. $week [$j] [$i] = $counter;9. }10.}11. ?>(4)细心的读者可能发现,上面的代码其实是一个雏型,因为它处理出来的数据并没有过滤那些空白的表格单元。下面来继续改造下这段代码,加入过滤和构造的部分。改造后的代码如下: 1. <?php2. //创建日期二维数组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. <?php2. $year = date ( 'Y' ); //获得年份, 例如: 20063. $month = date ( 'n' ); //获得月份, 例如: 044. $day = date ( 'j' ); //获得日期, 例如: 35. $firstDay = date ( "w", mktime ( 0, 0, 0, $month, 1, $year ) );6. //获得当月第一天