0

这是我所有月份都从第 1 天开始的问题,但 2012 年第 7 个月从第 2 天开始不知道为什么

这是代码

<table>
<?php
$cMonth = 7;
$cYear = 2012;

$first_day_timestamp = mktime(0,0,0,$cMonth,1,$cYear);
$maxday              = date("t",$first_day_timestamp);
$thismonth           = getdate($first_day_timestamp);
$startday            = $thismonth['wday'] - 1;

for ($i=0; $i<($maxday+$startday); $i++) {

    if (($i % 7) == 0 )  echo "<tr>";

    if ($i < $startday) { echo "<td>&nbsp;</td>" ; continue; }

    $current_day = $i - $startday + 1;

    echo "<td>". $current_day . "</td>";

    if (($i % 7) == 6 ) echo "</tr>";
}
?>
</table>

附上图片

日历

请告诉我为什么会这样

4

2 回答 2

2

更改$startday = $thismonth['wday'] - 1;$startday = $thismonth['wday'];显示正确的日历,星期天是一周的第一天。

您的代码的问题是 $startday 为 -1($thismonth['wday'] 为 0,因为该月从星期日开始)。在循环的第一次迭代中,$current_day = 0 - (-1) + 1 = 2它从 2 开始,这是正确的,因为星期一是每月的 2 号。

从星期日开始的任何一个月都会出现此问题。试试 2013 年 9 月。

于 2012-06-01T18:15:44.803 回答
1

你为什么做这个:

$startday            = $thismonth['wday'] - 1;

??

您正在将日期偏移量向后移动。这实际上是在说您要开始指望的那一天是该月第一天的前一天。

--EDIT-- 所以你这样做是因为你希望日历从星期一而不是星期日开始。php 的 wday 是这样的:

0(星期日)到 6(星期六)

您从中减去一个将使该月的开始向下移动一天,直到并且除非该月从星期日开始。然后 $startday 是-1,它会影响你的计数。您需要将其转至前一周。如果您添加另一行来修复这种情况,例如:

$startday = thismonth['wday'] - 1;
if($startday < 0 ) $startday = 6;

它应该可以解决问题。我敢肯定还有其他方法可以弥补星期一是一周的第一天。

于 2012-06-01T18:15:54.497 回答