Stanload: Kalender-Skript: letzter Tag (Mo.) im Monat wird nicht angezeigt

Hallöchen,

ich habe hier ein kleines Problemchen bei einem Kalender-Skript (siehe Link unten): der 28. Februar wird erstaunlicherweise nicht angezeigt und ich weiß zum Teufel nicht wieso. Gleiches gilt z.B. auch für den 30. Mai 2005.

Irgendwie wird die letzte Zeile, wenn es dort nur einen Tag gibt, nicht ausgegeben :-(.

Hier einfach einmal das Coding:
...
&php?php
monthonthissetsseGET_GET['y']) &ampregmmatch; preg_match('/^\GET,2}$/',$_GET['m']) &GET;amp;& $_GEGETm'] &ampdate 13) ? $_GET[year : dissetn')GETr />$year = (issetpregEmatch]) &&amGETmp; preg_matGET'/^\d{4}date$_GET['y'])) daysGETdate] : dmktime');
months = year('t',mktime(0,0,startncol1,$date));
mktimer />$stamonthl = year('w',mktime(0,0,0,rowsth,ceileadays1;

$roday= ceil($days/7);arr month />array1;

$arr_month = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','Noechoer','Dtableeid);
calendarcho '<table id=&amprevomonthendarmonthquot;>month />
$prev_yearh = (monthh==1) ? year $montyear
$prev_yenext monthth==1monthyear-1 : $yeamonth />
$next_yearh = (monthh==12) ? year$monthyearbr />$next_yeecho ($montr==12) ? thear+1 : $yhref

basename'<trPHPpSELF<th&prevgmonthp;lt;a ampf=&ampprevtyearasename($_SERVER[laquoSELF']).'?m='.$pthv_month.thacolspanamp;y='.$prev_year.'&arr;month&amonth;&ampyearuo;&amptht;/a&amptht;<hrefamp;gt;&abasename colspan=&aPHPqSELF5"next;month$arr_moamp[$montnext.year$year.'</traquo;gt;<th&ath;gt;&tr;a href="echosenametr_SERVER[tdHclassF']).'?headerext_month.Moamp;atd;amp;y='tdnclassear.'&aheadert;>Dimp;amtdraquo;&atd;class&gtheaderlt;/th&ampMit;&amtdlt;/tr&atd;class

headercho '&Do;tr&atd;gt;&amptdtclasslass=&aheadert;header&quottdamp;gt;Mtdaclass;/td&amheaderamp;lt;td class=&tdp;quot;htddclassp;quot;headert;Di</td&atd;gt;&tr;td class=&quoforeader&quorowsmp;gt;Mi</td&echogt;&amtrlt;td class=&quostartdcolamp;qstartacolgt;Do</tstart;col<td claif=&startucolheader"&adaygt;Fr</td&for&aaa;lstartccols=aamp;quotaaeader&quotechop;gt;Stdamp;lt;/tnbspp;gt;&tdp;lt;td class="headeformp;qustartmcolt;So</td></trdayp;gt;daybr /date />for($a=0;$a&ampmonthrowdate++)
{
eyear'&amdate;tr>';
td class /> $sttodayol = ($start_day == -1)td 6 : $start_ctd;
day /> if(tdtart_col&gtechoampdayp;&amdaysp; $day==td
{
nbsp>  fotd$aa=$start_day;$aa&gtday$aa--)
  { echo '&echolt;td&atr;gt;&nstartacollt;/td>'; }
echor />
tableor($b=$start_col;$b<7;$b++)
{
  $s_day = ($day == date('j') &ahoffmp;& $month = date('n') &ampStanloadp; $year == date('Y')) ? '<td class="today">'.$day.'</td>' : '<td>'.$day.'</td>';
  echo ($day>$days) ? '<td> </td>' : $s_day;
  $day++;
}

echo '</tr>';
$start_col = 0;
}

echo '</table>';
?>
...

Vielleicht könnt Ihr mir ja weiterhelfen *hoff*.

Bis denn

Stanload

  1. Hi,

    Hier einfach einmal das Coding:
    &php?php
    monthonthissetsseGET_GET['y']) &ampregmmatch; preg_match('/^\GET,2}$/',$_GET['m']) &GET;amp;& $_GEGETm'] &ampdate 13) ? $_GET[year :

    Da ist doch wohl irgendwas schiefgelaufen, oder?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo MudGuard,

      Da ist doch wohl irgendwas schiefgelaufen, oder?

      Ich glaub, die neue Forumssoftware hat ganz gewaltig sein Posting verhunzt.

      Gruß
      Lachgas

      --
      Keine Verbesserung ist zu klein oder geringfügig, als dass man sie nicht durchführen sollte. (Adorno)
      1. Hallöchen,

        Ich glaub, die neue Forumssoftware hat ganz gewaltig sein Posting verhunzt.

        Das glaube ich auch!

        Hm, da ist man mal ein paar Monate nicht mehr hier und alles läuft anders *g*.

        Wie kann ich denn nun Coding hier posten?

        Bis denn

        Stanload

        1. Hi,

          Wie kann ich denn nun Coding hier posten?

          Im Zweifelsfall als .txt auf Deinem Webspace ablegen und hier verlinken.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Hallo,

            ich hab's nun noch einmal versucht und siehe da, es hat geklappt *g*.

            Bis denn

            Stanload

  2. So, hier das Skript noch einmal ein bissel leserlicher *g*:

    <?php
    $month = (isset($_GET['y']) && preg_match('/^\d{1,2}$/',$_GET['m']) && $_GET['m'] < 13) ? $_GET['m'] : date('n');
    $year = (isset($_GET['y']) && preg_match('/^\d{4}$/',$_GET['y'])) ? $_GET['y'] : date('Y');
    $days = date('t',mktime(0,0,0,$month,1,$year));

    $start_col = date('w',mktime(0,0,0,$month,1,$year))-1;

    $rows = ceil($days/7);

    $day=1;

    $arr_month = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');

    echo '<table id="calendar">';

    $prev_month = ($month==1) ? 12 : $month-1;
    $prev_year = ($month==1) ? $year-1 : $year;

    $next_month = ($month==12) ? 1 : $month+1;
    $next_year = ($month==12) ? $year+1 : $year;

    echo '<tr><th><a href="'.basename($_SERVER['PHP_SELF']).'?m='.$prev_month.'&amp;y='.$prev_year.'">&laquo;</a></th><th colspan="5">'.$arr_month[$month-1].' '.$year.'</th><th><a href="'.basename($_SERVER['PHP_SELF']).'?m='.$next_month.'&amp;y='.$next_year.'">&raquo;</a></th></tr>';

    echo '<tr><td class="header">Mo</td><td class="header">Di</td><td class="header">Mi</td><td class="header">Do</td><td class="header">Fr</td><td class="header">Sa</td><td class="header">So</td></tr>';

    for($a=0;$a<$rows;$a++)
    {
    echo '<tr>';

    $start_col = ($start_col == -1) ? 6 : $start_col;

    if($start_col>0 && $day==1)
    {
      for($aa=$start_col;$aa>0;$aa--)
      { echo '<td>&nbsp;</td>'; }
    }

    for($b=$start_col;$b<7;$b++)
    {
      $s_day = ($day == date('j') && $month = date('n') && $year == date('Y')) ? '<td class="today">'.$day.'</td>' : '<td>'.$day.'</td>';
      echo ($day>$days) ? '<td>&nbsp;</td>' : $s_day;
      $day++;
    }

    echo '</tr>';
    $start_col = 0;
    }

    echo '</table>';
    ?>

    Bis denn

    Stanload

    1. Hallo,

      $days = date('t',mktime(0,0,0,$month,1,$year));

      $rows = ceil($days/7);

      Wenn $days == 28, dann ist $rows == 4. Der Februar liegt aber in 5 Wochen.

      Ermittle die Kalenderwoche für jeweils den 1. und Letzten des Monats und setzte $rows auf die Differenz der KWs + 1.

      viele Grüße

      Axel

      1. Hallo Axel,

        Wenn $days == 28, dann ist $rows == 4. Der Februar liegt aber in 5 Wochen.

        Ermittle die Kalenderwoche für jeweils den 1. und Letzten des Monats und setzte $rows auf die Differenz der KWs + 1.

        könntest Du mir bitte weiterhelfen *g*:
        wie ermittle ich die Kalenderwoche des 1. und Letzten?

        Bis denn

        Stanload

        1. Hallo,

          wie ermittle ich die Kalenderwoche des 1. und Letzten?

          Was hast Du an der date()-Funktion http://de3.php.net/manual/en/function.date.php, die Du ja bereits verwendest, nicht verstanden?

          viele Grüße

          Axel

          1. Hallo,

            Was hast Du an der date()-Funktion http://de3.php.net/manual/en/function.date.php, die Du ja bereits verwendest, nicht verstanden?

            Ich habe es nicht so richtig verstanden, da das Skript nicht von mir ist.
            Ich habe es im Netz gefunden, möchte es verwenden und bin auf den Fehler aufmerksam geworden.

            Den Entwickler versuche ich seitdem vergebens zu erreichen.

            Bis denn

            Stanload

            1. Hallo,

              Was hast Du an der date()-Funktion http://de3.php.net/manual/en/function.date.php, die Du ja bereits verwendest, nicht verstanden?
              Ich habe es nicht so richtig verstanden, da das Skript nicht von mir ist.

              Dann wird es schwierig.

              Die Kalenderwoche des 1. kannst Du mit

              $KW1 = date('W',mktime(0,0,0,$month,1,$year));

              die des Letzten mit:

              $days = date('t',mktime(0,0,0,$month,1,$year));
              $KW2 = date('W',mktime(0,0,0,$month,$days,$year));

              ermitteln.

              Da ist aber garantiert noch mehr anzupassen.

              viele Grüße

              Axel

              1. Hallo,

                Die Kalenderwoche des 1. kannst Du mit

                $KW1 = date('W',mktime(0,0,0,$month,1,$year));

                die des Letzten mit:

                $days = date('t',mktime(0,0,0,$month,1,$year));
                $KW2 = date('W',mktime(0,0,0,$month,$days,$year));

                ermitteln.

                Wow, das klappt ja schon super.
                Wo mir natürlich nun direkt etwas aufgefallen ist, ist der Januar 2005. Ich denke mal, das liegt mit sicherheit daran, dass der 1. noch zur 52. KW gehört und wenn ich dann $rows = ceil($KW2-$KW1+1); rechne, bekommt er einen falschen Wert.

                Bis denn

                Stanload