2014-12-30 82 views
0

我看了,還沒有找到答案。PHP日曆跳過二月

我有一個PHP的日曆,當去下個月或上個月來回1月2日,它跳過二極管,反之亦然,從三月到二月,它跳過二極管。 它每4年做一次,所以我知道它與閏年有關,但似乎無法找到問題。

這裏是代碼:

<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> 

+1

你的'goLastMonth'和'goNextMonth'看起來很腥。當你回來時,你爲什麼要從「第一個月」到「第十三個月」,但是當你前進時,你會從「第12個月」到「第0個月」? – meagar

+0

你爲什麼不看看DateTime對象? http://php.net/manual/en/datetime.add.php –

回答

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月不是。

1

我懷疑你的問題是,治療的Javascript作爲月份一個月0,而PHP把一月是月份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; 
} 

...