Ich versuche folgendes zu erreichen:Wochen erhöhen Sie die Chance, wo die Wochen vom ersten Montag im April bis zum ersten Montag im April nächstes Jahr in PHP anfangen zu zählen
Für Berichtszwecke unserer Woche Zahlen aus dem ersten Montag im April beginnen jeweils Jahr.
Ich schaffe einen Kalender PHP in folgendem Format:
MTWTFSS
Am Ende jeder Zeile des Monats möchte ich die Woche Nummer anzuzeigen, beginnend bei 1, wo der erste Montag im Der April wird Woche eins bis zum nächsten ersten Montag im April (nächstes Jahr) sein, wo es wieder von einem beginnt.
Ich kämpfe mit der Logik - kann jemand eine Lösung vorschlagen? stattdessen zu tun ist 01 die Woche Zahl von Januar zu haben, hat sie vom ersten Montag im April
Dank
EDIT siehe meinen Code unten, im Grunde, was ich versuche:
<?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>
Teil Kredit für oben genannten Kalender (Code etwas angeglichen) an: https://www.phpjabbers.com/how-to-make-a-php-calendar-php26-4.html
Sie sollten Ihren Codierungsversuch einschließen, auch wenn er sehr schlecht ist. Wenn du deinen Code veröffentlichst, beweist das, dass du versucht hast, dich selbst zu lösen und zeigst, wie viel Forschung du getan hast, bevor du deine Frage gepostet hast. Derzeit scheint es, dass Sie SO als einen kostenlosen Codierungsdienst verwenden. Dies kann oder kann nicht wahr sein. In jedem Fall muss Ihre Frage bearbeitet werden. – mickmackusa
Ich habe nie nach einer Codelösung gefragt, ich habe nur nach der Logik gefragt! Die folgende Antwort zeigt die Logik, so dass ich verstehen kann, wofür ich dankbar bin. – Michael
Das ist irrelevant. Sie sollen immer Ihren Versuch einschließen. Ich nenne dich nicht schlecht. Bitte aktualisieren Sie Ihre Frage. Es kann gemischter Semi-Code sein, der Kommentare enthält, wo Logikkomponenten sind, aber auch grundlegende PHP-Schleifen und andere tatsächliche Syntax verwendet. Dieser Schritt hilft den Menschen, sich selbst zu lösen, während sie ihre Frage schreiben - was die gesamten Fragen, die SO betreffen, reduziert. Wenn die isolierten Probleme nicht vom OP behoben werden können, können Freiwillige einfache Anpassungen vornehmen, anstatt einen vollständigen Code-Block von Grund auf neu zu schreiben. Nochmals, ich nenne dich keine schlechte Person. – mickmackusa