簡體   English   中英

無法在php日歷中打印2月

[英]not able to print february month in php calendar

這是我為使用php和html生成日歷而創建的代碼,但是此代碼不適用於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>

您的代碼在一個月中的大部分時間都有效,而在2月不存在的日子中則無效。 查看以下行:

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

它將日期設置為該月的當前日期。 今天,是29日。

接下來,創建一個timstamp:

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

這會嘗試從2014-02-29創建數據,該數據將失敗。

為什么要將日期解析為參數? 看起來代碼中沒有使用它。 一種快速的解決方案是忘記day參數,而僅從該月的第一天開始創建時間戳。

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

$currentTimeStamp = strtotime("$year-$month-$day");行之前添加此代碼$currentTimeStamp = strtotime("$year-$month-$day");

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM