购买日历功能



我写了一个日历脚本,工作得很好,直到我想添加导航上/下个月/年。当我调用printmonth($m,$y);当我调用printmonth($m+1,$y)时,它工作并显示当前月份;下个月就出现了。现在我手动添加了导航到NOT调用函数,它不起作用,它显示了今年的12月。总是这样。它甚至尝试导航到第13个月,尽管我添加了if语句来检查它是一年的最后一个月还是一年的第一个月。请评论如果你看到可疑的东西,我知道它的可怕的结构和变量名不漂亮,但我正在做我的第一步在PHP。

感谢您的时间和反馈,以下是我的功能:

function printmonth($month,$year) {
// abort if invalid values
if($month>=13) { die("No month >=13 please");   };
if(($year<=1970) || ($year>=3000)) {die("No year <=1970 or >=3000 please");};
// an array of names
$mnames = array(
    1 => "Januar",
    2 => "Februar",
    3 => "März",
    4 => "April",
    5 => "Mai",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 => "Dezember"
);    
// more vars
$month     = intval($month);
$year      = intval($year);    
$thisday   = intval(date('j'));
$thismonth = intval(date('m'));
$thisyear  = intval(date('Y'));
$weekday        = date("N", mktime(0,0,0,$month,"01",$year));
$lastdayofmonth = date('t', mktime(0,0,0,$month,2,$year));
$oneless        = $weekday-1;
/* calculate end of last month */
$lastdayoflastmonth = date('t', mktime(0,0,0,$month-1,2,$year));
$pp=$lastdayoflastmonth-$oneless+1;
$seven = 0+$weekday;
// next year/month... problem must be somewhere in this section
$prevyear = $year-1;
$nextyear = $year+1;
if ($month=1)  { $prevmonth=12;         $nextmonth=$month+1; };
if ($month=12) { $prevmonth=$month-1;   $nextmonth=1;  };
if (($month>=2) || ($month<=11)) {$prevmonth=$month-1; $nextmonth=$month+1;};
// print table head and navigation and day names
echo('<table class="cal">'."n");
echo('<tr class="headnav">'."n");
echo('    <td class="headtd"><a href="?y='.$prevyear.'&m='.$month.'">|<</a></td>'."n");
echo('    <td class="headtd"><a href="?y='.$year.'&m='.$prevmonth.'">&lt;</a></td>'."n");
echo('    <td class="headtd" colspan="3">'.$mnames[$month].' '.$year.'</td>'."n");
echo('    <td class="headtd"><a href="?y='.$year.'&m='.$nextmonth.'">&gt;</a></td>'."n");
echo('    <td class="headtd"><a href="?y='.$nextyear.'&m='.$month.'">>|</a></td>'."n");
echo('</tr>'."n");
echo('<tr class="head">'."n");
echo('   <td class="headtd">Mo</td>'."n");
echo('   <td class="headtd">Di</td>'."n");
echo('   <td class="headtd">Mi</td>'."n");
echo('   <td class="headtd">Do</td>'."n");
echo('   <td class="headtd">Fr</td>'."n");
echo('   <td class="headtd">Sa</td>'."n");
echo('   <td class="headtd">So</td>'."n");
echo('</tr>'."n");
echo(' <tr>'."n");
//print end of last month
for ($l=1;$l<=$oneless;$l++) { 
    echo('<td class="placebegin">'.$pp.'</td>'."n");
    $pp++;
};
// print each day until last day of month
for ($x=1;$x<=$lastdayofmonth;$x++) 
    { 
        if (($x==$thisday) && ($thismonth==$month) && ($thisyear==$year))
            {$bold = 1;} 
                else {$bold = 0;};
        if ($seven<=7) { 
            if ($bold = 1) 
                {      echo('<td class="today"><a href="tage.php?d='.$x.'&m='.$month.'&y='.$year.'" class="tag">'.$x.'</a></td>'."n"); } 
                else { echo('<td class="row">  <a href="tage.php?d='.$x.'&m='.$month.'&y='.$year.'" class="tag">'.$x.'</a></td>'."n");};
            $seven++; 
      } else { 
          echo('</tr><tr>'); 
          $seven = 1; 
          $x--; 
      };
    };
// print numbers until row is complete    
$p = 1;
for ($e=$seven;$e<=7;$e++) { echo('<td class="placebegin">'.$p.'</td>'); $p++; };

// complete table
echo ('   </tr> ');
echo (' </table>');
//done
}; 
//function ends here, the call and some vars:

if (isset($_GET['y']) && (!empty($_GET['y']))) 
{
$y=intval($_GET['y']);
} 
    else 
        {
        $y = intval(date('Y'));
        };
if (isset($_GET['m']) && (!empty($_GET['m']))) 
{
$m=intval($_GET['m']);
} 
    else 
        {
        $m = intval(date('n'));
        };
// call function
printmonth($m, $y);

你不应该用

if($month == 1)//condition
不是

if($month = 1)//assignment

以及第二个if

第三个if必须使用&&而不是||,因此替换

if (($month>=2) || ($month<=11))

if (($month>=2) && ($month<=11))

赋值成功并且(如果我没记错的话,如果你赋值的变量是在操作之后设置的)。因此,$month = 1成功了。因此,$prevmonth被设置为12,因此12月…

当我自己运行你的函数时,它工作了…尽管一个人得到了很多警告…

Warning: date() [function。:依赖系统的时区设置是不安全的。要求使用的日期。时区设置或date_default_timezone_set()函数。如果你用了这些方法,你还是会得到这个警告,您很可能拼错了时区标识符。我们联机29

Warning: date() [function。:依赖系统的时区设置是不安全的。要求使用的日期。时区设置或date_default_timezone_set()函数。如果你用了这些方法,你还是会得到这个警告,您很可能拼错了时区标识符。我们联机30

Warning: date() [function。:依赖系统的时区设置是不安全的。要求使用的日期。时区设置或date_default_timezone_set()函数。如果你用了这些方法,你还是会得到这个警告,您很可能拼错了时区标识符。我们31

Warning: mktime() [function. s]mktime]:依赖系统的时区设置是不安全的。要求来使用日期。时区设置或date_default_timezone_set()函数。万一你用了这些方法,你仍然收到此警告,您很可能拼错了时区标识符。我们为"EDT/-4.0/DST"选择了"America/New_York"在线33

Warning: date() [function。:依赖系统的时区设置是不安全的。要求使用的日期。时区设置或date_default_timezone_set()函数。如果你用了这些方法,你还是会得到这个警告,您很可能拼错了时区标识符。我们在line 33

Warning: mktime() [function. s]mktime]:依赖系统的时区设置是不安全的。要求来使用日期。时区设置或date_default_timezone_set()函数。万一你用了这些方法,你仍然收到此警告,您很可能拼错了时区标识符。我们为"EDT/-4.0/DST"选择了"America/New_York"在线34

Warning: date() [function。:依赖系统的时区设置是不安全的。要求使用的日期。时区设置或date_default_timezone_set()函数。如果你用了这些方法,你还是会得到这个警告,您很可能拼错了时区标识符。我们34

Warning: mktime() [function. s]mktime]:依赖系统的时区设置是不安全的。要求来使用日期。时区设置或date_default_timezone_set()函数。万一你用了这些方法,你仍然收到此警告,您很可能拼错了时区标识符。我们为"EDT/-4.0/DST"选择了"America/New_York"在线39

Warning: date() [function。:依赖系统的时区设置是不安全的。要求使用的日期。时区设置或date_default_timezone_set()函数。如果你用了这些方法,你还是会得到这个警告,您很可能拼错了时区标识符。我们联机39

最新更新