簡體   English   中英

PHP日歷跳過2月

[英]PHP calendar skips February

我已經看過,但是沒有找到答案。

我有一個php日歷,當去下個月或上個月從1月到2月時,它跳過2月,反之亦然,從3月到2月,它跳過了2月。 它每4年執行一次此操作,因此我知道它與leap年有關,但似乎找不到問題。

這是代碼:

<html>
<head>
<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"); 
}

// calender variable // 
$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>
<td></td> 
</tr>
<tr>
<td width='50px' align='center'>D</td>
<td width='50px' align='center'>L</td>
<td width='50px' align='center'>M</td>
<td width='50px' align='center'>M</td>
<td width='50px' align='center'>J</td>
<td width='50px' align='center'>V</td>
<td width='50px' align='center'>S</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++) {
// blank space //
echo "<td>&nbsp;</td>";
} 
}
if ($counter % 7 == 0 && $counter != 0){
echo "</tr><tr>";
}
echo "<td align='center'>".$i."</td>";
}
echo "</tr>";
?>

</table>

</body>

我懷疑您的問題是Javascript將1月視為第0個月,而PHP將1月視為第1個月。

我覺得您已經翻轉了。

您是從JavaScript還是PHP獲得收益? 如果使用JavaScript,則永遠不應該有第12個月。無論哪種情況,都絕對不要有第13個月。

由於您說的是month而不是$month我將假設它來自Javascript。 在這種情況下,我想我會這樣更改:

function goLastMonth(month, year){
    if (month == 0) {
        --year;
        month = 11;
}

...

function goNextMonth(month, year){
    if (month == 11) {
        ++year;
        month = 0;
}

...

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

...

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

如果沒有給出明確的日期,則說明您正在使用當前日期。 猜猜是什么,今天是30號。 沒有2月30日。 然后,您將以此為基礎進行所有日期計算。

如果要為某個月制作時間戳記,然后迭代到下個月,請始終以該月初為准。 1月1日+ 1個月有意義,1月30日+ 1個月沒有意義。

暫無
暫無

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

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