<?php
class calendar{
private $year;
private $month;
private $daynum;
private $start_day;

function __construct(){
$this->year=isset($_GET["year"])?$_GET["year"]:date("Y");
$this->month=isset($_GET["month"])?$_GET["month"]:date("n");
$this->daynum=date("t",mktime(0,0,0,$this->month,1,$this->year));
$this->start_day=date("w",mktime(0,0,0,$this->month,1,$this->year));


}

function out(){
echo '<table align="center">';
$this->changecalendar();
$this->daylist();
$this->formset();

echo '</table>';
}


function daylist(){
$day=array('日','一','二','三','四','五','六','七');
echo '<tr class="oneline">';
for($i=0;$i<7;$i++){
echo '<td>';
echo $day[$i];
echo '</td>';
}
echo '</tr>';
}


function formset() {
echo '<tr>';
for($j=0; $j<$this->start_day; $j++)
echo '<td>&nbsp;</td>';


$k=$this->start_day;
for($j=1;$j<=$this->daynum;$j++){
if($j==date("j")){
echo '<td class="oneline">'.$j.'</td>';
}else{
echo '<td>'.$j.'</td>';
}
$k++;
if($k%7==0)
echo '</tr><tr>';

} }


private function changecalendar(){
echo '<tr>';
//这个正常 echo '<td><a href="?'.$this->prevYear($this->year,$this->month).'">'.'<<'.'</a></td>';
//这个不正常 echo '<td><a href="?'.$this->preYear().'">'.'<<'.'</a></td>';
echo '<td colspan="3">'.$this->year.'-'.$this->month.'</td>';
echo '</tr>';
}

private function prevYear($year, $month){
$year=$year-1;

if($year < 1970)
$year = 1970; return "year={$year}&month={$month}";
}


private function preYear(){
$this->year=$this->year-1;

if($this->year<1970){
$this->year=1970;
}
return "year={$this->year}&month={$this->month}";
}

private function preMonth(){
if($this->month == 1){
$this->year=$this->year - 1;
$this->month=12;
}else{
$this->month=$this->month-1;
}
echo "111";
return 'year='.$this->year.'&month='.$this->month;
}

private function nextYear(){
$this->year=$this->year + 1;
if($this->year>2038){
$this->year=2038;
}
return 'year='.$this->year.'&month='.$this->month;
}

private function nextMonth(){
if($this->month==12){
$this->month=1;
$this->year=$this->year + 1;
}else{
$this->month=$this->month + 1;

}
return 'year='.$this->year.'&month='.$this->month;

}

}运行文件:<style> table{
width:300px;
border:1px solid #050;
text-align:center;
}
.oneline{
color:white;
background:blue;

}
</style>
<?php
include "calendar.php";
$calendar=new calendar();
$calendar->out();这是一个制作日历的php小程序,请看我注释那2行,第一行很正常,而第二行运行的时候你会发现year是2011,而且总比表单中的year小一,但你看这2行中的方法竟然是一样的,奇怪吧?想了半天了,我投降了,菜鸟求高手解答;;

解决方案 »

  1.   

    private function preYear(){
                $this->year=$this->year-1;
                
                if($this->year<1970){
                    $this->year=1970;
                }
                return "year={$this->year}&month={$this->month}";    
            }我想知道为啥总是-1年啊??
      

  2.   

    把‘//这个正常’这个去掉,运行之后出现'<<';作用是点击之后年份减一年其他的不变
      

  3.   

    你把$this->year 减1 了,当然表单中的year小一 啦,preYear() 改成如下:
     private function preYear(){
                $year=$this->year-1;
                
                if($year<1970){
                    $year=1970;
                }
                return "year={$year}&month={$this->month}";    
            }
      

  4.   

    你按<<这个就会向后1年,所以代码写-1
      

  5.   

    我这个跟你的没啥区别吧?你是$this->year=$this->year-1,跟$year=$this->year-1
          
                private function preYear(){
                $this->year=$this->year-1;
                
                if($this->year<1970){
                    $this->year=1970;
                }
                return "year={$this->year}&month={$this->month}";    
            }
      

  6.   

    怎么会没有区别,你原来的代码对 $this->year 重新赋值了。因此影响后面年份的输出。