2014-09-29 21 views
0

這是我爲使用php和html生成日曆而創建的代碼。但此代碼在2月份不工作,直接跳轉到3月.even在直接傳遞值之後去遊行,大家請幫我解決這個問題。無法在php日曆中打印2月份

<html> 
<head> 
    <title>Calendar</title> 
    <link rel="stylesheet" type="text/css" href="style.css" /> 

    <script> 
     function goLastMonth(month, year){ 
      if(month == 1){ 
       --year; 
       month = 13; 
      } 
      document.location.href = "<?php $_SERVER['PHP_SELF'];?> 
?month="+(month-1)+"&year="+year; 
     } 
     function goNextMonth(month, year){ 
      if(month == 12){ 
       ++year; 
       month = 0; 
      } 
      document.location.href = "<?php $_SERVER['PHP_SELF'];?> 
?month="+(month+1)+"&year="+year; 
     } 

    </script> 
</head> 

<body> 
<?php 
if(isset($_GET['day'])){ 
    $day = $_GET['day']; 
}else{ 
    $day = date("j"); 
} 
if(isset($_GET['month'])){ 
    $month = $_GET['month']; 
}else{ 
    $month = date("n"); 
} 
if(isset($_GET['year'])){ 
    $year = $_GET['year']; 
}else{ 
    $year = date("y"); 
} 


$currentTimeStamp = strtotime("$year-$month-$day"); 
$monthName = date("F", $currentTimeStamp); 
$numDays = date("t", $currentTimeStamp); 
$counter = 0; 
?> 
<table border='1'> 
    <tr> 
     <td><input style='width:50px;' type='button' value='<' 
name='previousbutton'onclick="goLastMonth(<?php echo $month.",".$year;?>);"> </td> 
     <td colspan='5' align='center'><?php echo $monthName.",".$year; ?></td> 
     <td><input style='width:50px;' type='button' value='>' 
name='nextbutton' onclick="goNextMonth(<?php echo $month.",".$year;?>);"> </td> 
    </tr> 
    <tr> 
     <td width='50px' align='center'>Sun</td> 
     <td width='50px' align='center'>Mon</td> 
     <td width='50px' align='center'>Tue</td> 
     <td width='50px' align='center'>Wed</td> 
     <td width='50px' align='center'>Thur</td> 
     <td width='50px' align='center'>Fri</td> 
     <td width='50px' align='center'>Sat</td> 
    </tr> 
    <?php 
    echo "<tr>"; 

    for($i=1;$i<$numDays+1;$i++,$counter++){ 
     $timeStamp = strtotime("$year-$month-$i"); 
     if($i==1){ 
      $firstDay = date("w",$timeStamp); 
      for($j = 0;$j<$firstDay;$j++,$counter++){ 
       echo "<td>&nbsp;</td>"; 
      } 
     } 
     if($counter % 7 == 0){ 
      echo "</tr><tr>"; 
     } 
     echo "<td align='center'>".$i."</td>"; 

    } 

    echo "</tr>"; 
    ?> 
</table> 
</body> 
</html> 
+0

應該是真的解析變量? :)「+(month-1)+」 – lenden 2014-09-29 10:12:41

+0

雅它應該解析....是否有任何其他方式 – 2014-09-29 10:21:02

+0

這是二月錯誤,我認爲 – Gudgip 2014-09-29 10:27:13

回答

0

您的代碼適用於大部分月份的日子,而不是在2月份不存在的日子。看看以下行:

if(isset($_GET['day'])){ 
    $day = $_GET['day']; 
} else { 
    $day = date("j"); 
} 

它將當天設置爲當月的當天。今天,這是29日。

接下來,創建一個timstamp:

$currentTimeStamp = strtotime("$year-$month-$day"); 

此試圖從2014年2月29日創建的數據,這將失敗。

爲什麼你想解析一天的參數?它看起來沒有用在代碼中。一個快速的解決方案可能是忘記日期參數,並從月初開始創建時間戳。

$currentTimeStamp = strtotime("$year-$month-01"); 
+0

它的工作.....但我有另一個查詢 - 當這個月在週日開始它留下一個空白行? ??? ....請回復 – 2014-09-29 10:34:00

+0

它對我來說很好,例如2015年2月正確打印。星期天的第一天打印時沒有空行。 – Seshoumaro 2014-09-29 10:36:51

+0

它沒有css工作正常....可能是一些錯誤的CSS ....謝謝你的答案它的工作原理 – 2014-09-29 10:45:30

0

$currentTimeStamp = strtotime("$year-$month-$day");之前添加以下代碼:

$maxDay = cal_days_in_month(CAL_GREGORIAN, $month, $year); 
if($day > $maxDay) { 
    $day = $maxDay; 
}