Kalender in PHP

    • Gelöst
    • Kalender in PHP

      Ich glaub', ich steh' grad auf der Leitung; folgendes Problem:
      Ich soll einen Kalender in PHP programmieren, bei dem man später auswählen können soll, mit welchem Tag eine Woche beginnt. Das ganze soll in eine HTML-Tabelle.

      Ich hole mir also mit date und mktime den Wochentag zum ersten des Monats und gebe in der Anzahl dieser Wochentagsnummer '<td></td>' aus, damit der Erste in der richtigen Tabellenspalte sitzt. Danach fange ich nochmal von 1 bis Anzahl der Tage im Monat zum Zählen an und erhöhe gleichzeitig den Wochentag zum Ersten, wenn dieser auf 6 steht, gebe ich '</tr><tr>' für einen Zeilensprung aus und setze die Variable auf 0 zurück.

      Mein Problem ist nun, dass ich damit einen Kalender erhalte, der mit Sonntag beginnt, ich muss aber mit allen möglichen Wochentagen starten können.
      Hat jemand eine Idee, wie ich das umsetzen kann?
    • Ich würde es so machen:

      du machst

      Quellcode

      1. switch(date(D, $erster_des_monats))
      2. {
      3. case 'Mon':
      4. $no_of_first_day = 1;
      5. break;
      6. case 'Tue':
      7. $no_of_first_day = 2;
      8. break;
      9. //usw...
      10. }
      Alles anzeigen


      dann machst du halt eine variable $current_day oder so die du auf $no_of_first_day als startwert setzt und dann immer mitzählst bzw auf 0 setzt.

      Ich hoffe das war was du gemeint hast ;)
      James
      [Blockierte Grafik: http://dl.dropbox.com/u/24753690/stuff/forenlinks/rocketsign.png]
      Team Rocket - so schnell wie das Licht,
      gebt lieber auf und bekämpft uns nicht!

      join #teamrocket @iz-smart.net
    • Quellcode

      1. date('w', $erster_des_monats)

      macht doch dasselbe, oder?

      Hier mal der komplette Code:

      PHP-Quellcode

      1. <html>
      2. <head>
      3. <title>Calendar</title>
      4. <style type="text/css">
      5. table {
      6. border-collapse: collapse;
      7. }
      8. td, th {
      9. border: 1px solid #000;
      10. padding: 5px;
      11. }
      12. </style>
      13. </head>
      14. <body>
      15. <table>
      16. <tr>
      17. <?php
      18. $weekdays = array('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag');
      19. foreach ($weekdays as $wd) {
      20. echo '<th>'.$wd.'</th>';
      21. }
      22. ?>
      23. </tr>
      24. <tr>
      25. <?php
      26. $first = date('w', mktime(0, 0, 0, $month, 1, $year));
      27. for ($i = 0; $i < $first; $i++) {
      28. echo '<td></td>';
      29. }
      30. $days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year));
      31. for ($i = 1; $i <= $days_in_month; $i++) {
      32. if ($first++ > 6) {
      33. echo '</tr><tr>';
      34. $first = 1;
      35. }
      36. echo '<td>'.$i.'</td>';
      37. }
      38. for (; $first < 7; $first++) {
      39. echo '<td></td>';
      40. }
      41. ?>
      42. </tr>
      43. </table>
      44. </body>
      45. </html>
      Alles anzeigen


      Nachtrag:
      Das foreach-Statement kann ich mir später auch schenken, sofern ich das Array nicht umkrempeln will.

      Nachtrag:
      Habs:

      PHP-Quellcode

      1. <html>
      2. <head>
      3. <title>Calendar</title>
      4. <style type="text/css">
      5. table {
      6. border-collapse: collapse;
      7. }
      8. td, th {
      9. border: 1px solid #000;
      10. padding: 5px;
      11. }
      12. </style>
      13. </head>
      14. <body>
      15. <table>
      16. <tr>
      17. <?php
      18. $week_start = 1;
      19. $weekdays = array('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag');
      20. for ($i = 0; $i < 7; $i++) {
      21. echo '<th>'.$weekdays[($week_start + $i) % 7].'</th>';
      22. }
      23. ?>
      24. </tr>
      25. <tr>
      26. <?php
      27. $first = date('w', mktime(0, 0, 0, $month, 1, $year)) - $week_start;
      28. if ($first < 0) {
      29. $first += 7;
      30. }
      31. for ($i = 0; $i < $first; $i++) {
      32. echo '<td></td>';
      33. }
      34. $days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year));
      35. for ($i = 1; $i <= $days_in_month; $i++) {
      36. if ($first++ > 6) {
      37. echo '</tr><tr>';
      38. $first = 1;
      39. }
      40. echo '<td>'.$i.'</td>';
      41. }
      42. for (; $first < 7; $first++) {
      43. echo '<td></td>';
      44. }
      45. ?>
      46. </tr>
      47. </table>
      48. </body>
      49. </html>
      Alles anzeigen
    • Ich schreibs jetzt mal neu

      Quellcode

      1. $weekdays = array('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag');
      2. $first_day_of_month = date('w', mktime(0, 0, 0, $month, 1, $year));
      3. $days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year));
      4. echo '<table><tr>';
      5. $temp = 0; //temp variable zum zählen der tage
      6. $currentday = $first_day_of_month;
      7. while($temp < 7)
      8. {
      9. echo '<td>' . $weekdays[$currentday] . '</td>';
      10. $currentday++;
      11. if($currentday > 6)
      12. {
      13. $currentday = 0;
      14. }
      15. $temp++;
      16. }
      17. echo '</tr><tr>';
      18. for($day = 1; $day <= $days_in_month; $day++)
      19. {
      20. //hier eben den gewünschten inhalt einfügen...
      21. }
      Alles anzeigen


      Habs jetzt nicht probiert, da ich grade am Schulrechner sitze, aber dürfte doch so funktionieren oder?


      EDIT:

      ok zu langsam ;)
      James
      [Blockierte Grafik: http://dl.dropbox.com/u/24753690/stuff/forenlinks/rocketsign.png]
      Team Rocket - so schnell wie das Licht,
      gebt lieber auf und bekämpft uns nicht!

      join #teamrocket @iz-smart.net

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Stan ()