我努力實現以下目標:獲取其中的幾個星期開始從第一個星期一PHP
爲了報告的目的我們的週數從第一個星期一開始在四月的每個年。
我使用以下格式PHP創建日曆:
MTWTFSS
在那一個月,我想顯示的週數,從每行的結尾處1,其中的第一個星期一四月將會是第一週一直到四月(明年)的下一個第一個星期一,從那裏再次開始。
我很努力的邏輯 - 任何人都可以提出解決方案嗎?
感謝
編輯看到我下面的代碼,基本上就是我想要做的是,而不必從1月1週數,有它的第一個星期一4月:
<?php
$monthNames = Array("January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December");
?>
<?php
if (!isset($_REQUEST["month"])) $_REQUEST["month"] = date("n");
if (!isset($_REQUEST["year"])) $_REQUEST["year"] = date("Y");
?>
<?php
$cMonth = $_REQUEST["month"];
$cYear = $_REQUEST["year"];
$prev_year = $cYear;
$next_year = $cYear;
$prev_month = $cMonth-1;
$next_month = $cMonth+1;
if ($prev_month == 0) {
$prev_month = 12;
$prev_year = $cYear - 1;
}
if ($next_month == 13) {
$next_month = 1;
$next_year = $cYear + 1;
}
?>
<table width="250">
<tr align="center">
<td bgcolor="#999999" style="color:#FFFFFF">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50%" align="left"> <a href="<?php echo $_SERVER["PHP_SELF"] . "?month=". $prev_month . "&year=" . $prev_year; ?>" style="color:#FFFFFF">Previous</a></td>
<td width="50%" align="right"><a href="<?php echo $_SERVER["PHP_SELF"] . "?month=". $next_month . "&year=" . $next_year; ?>" style="color:#FFFFFF">Next</a> </td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">
<table width="100%" border="0" cellpadding="2" cellspacing="2">
<tr align="center">
<td colspan="8" bgcolor="#999999" style="color:#FFFFFF"><strong><?php echo $monthNames[$cMonth-1].' '.$cYear; ?></strong></td>
</tr>
<tr>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>M</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>T</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>W</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>T</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>F</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>S</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>S</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Week No</strong></td>
</tr>
<?php
$timestamp = mktime(0,0,0,$cMonth,1,$cYear);
$maxday = date("t",$timestamp);
$thismonth = getdate ($timestamp);
//$startday = $thismonth['wday'];
$startday = $thismonth['wday']-1;
$firstDateMonth = 0;
function roundToNearestW($int, $i) {
return ceil($int/$i) * $i;
}
if ($startday == -1)
{
$startday = 6;
}
$complete_cells = roundToNearestW($maxday+$startday,7);
for ($i=0; $i<($complete_cells); $i++) {
if(($i % 7) == 0)
{
echo "<tr>
";
}
if($i < $startday || $i >= $maxday+$startday)
{
echo "<td></td>
";
}
else
{
if(($i - $startday + 1) > $firstDateMonth)
{
$firstDateMonth = ($i - $startday + 1);
}
echo "<td align='center' valign='middle' height='20px'>". ($i - $startday + 1) . "</td>
";
}
if(($i % 7) == 6)
{
$weekDate = $cYear."-".$cMonth."-".$firstDateMonth;
$Caldate = new DateTime($weekDate);
$week = $Caldate->format("W");
echo "<td align='center' valign='middle' height='20px'>WK ".$week."</td>
";
}
if(($i % 7) == 6)
{
echo "</tr>";
//firstDateMonth = 0;
}
}
?>
</table>
</td>
</tr>
</table>
部分上面的日曆(微調自己的代碼)的積分爲:https://www.phpjabbers.com/how-to-make-a-php-calendar-php26-4.html
你的意思是包括你的編碼嘗試,即使它很差。發佈你的代碼證明你已經試圖自我解決,並顯示在發佈你的問題之前你已經完成了多少研究。目前看起來您正在使用SO作爲免費編碼服務。這可能會也可能不會是真實的。無論哪種方式,您的問題需要編輯。 – mickmackusa
我從來沒有要求過一個代碼解決方案,我只是要求邏輯!下面的答案顯示了邏輯,所以我可以理解我很感激。 – Michael
這是無關緊要的。你總是打算包括你的嘗試。我不叫你壞人。請更新您的問題。它可以是具有註釋的邏輯組件的混合半碼,也可以使用基本的PHP循環和其他實際語法。做這一步有助於人們在寫問題的同時自我解決問題 - 這減少了所有遇到的問題。當孤立的問題不能由OP解決時,志願者可以做出簡單的調整,而不是從頭開始編寫一整塊代碼。再次,不要稱你爲壞人。 – mickmackusa