2009-08-20 5 views
0

Ich habe einen PHP-Kalender um http://idea-palette.com/aleventcal/calendar.php. Ich möchte, dass die Tage, die nicht Teil des aktuellen Monats sind, ausgegraut angezeigt werden (was jetzt der Fall ist), und ich möchte, dass sie als die Tage des vorherigen und nächsten Monats angezeigt werden.Wie kann ich Zahlen über den Monatstagen als neue Monatstagnummern anzeigen lassen?

Die Tage, die vor dem ersten Tag des Monats erscheinen, werden jetzt als negative Zahlen (-1, -2, -3 usw.) und als Tage nach dem letzten Tag des Monats angezeigt geh einfach weiter, also wenn ein Monat am 31. endet, dann würde es 32, 33, 34 und so weiter lesen.

Ich versuche, eine bedingte Anweisung mit einer Art von Schleife herauszufinden, wo ich sehen könnte, ob es größer ist als die gesamten Tage und dann etwas anderes tun. Das Problem, das ich sehe, ist, dass die Tabellenzelle, die erstellt wird, wird durchgeschleift wird, also wenn ich nur Tag $ tue + 1, dann anstelle von 32, wird es gerade gelesen 33.

Hier ist mein Code:

for($i=0; $i< $total_rows; $i++) 
{ 
    for($j=0; $j<7;$j++) 
    { 
     $day++;     

     //if the current day is less or equal to the total days in the month   
     if($day>0 && $day<=$total_days_of_current_month) 
     { 
      $date_form = "$current_year/$current_month/$day"; 

      echo '<div class="date_has_event" href="#"><td'; 

      //If the date is today then give the td cell the 'today' class 
      if($date_form == $today) 
      { 
       echo ' class="today"'; 
      } 

      //check if any event stored for the date 
      if(array_key_exists($day,$events)) 
      { 
       //adding the date_has_event class to the <td> and close it 
       echo ' class="date_has_event">'.$day; 

       //adding the eventTitle and eventContent wrapped inside <span> & <li> to <ul> 
       echo '<div class="events"><ul>'.$events[$day].'</ul></div>'; 
      } 
     } 
     else //if the current day is less or more than the total days in the month 
     { 
      //then create a table cell with the current day of the mont 
      echo '<td class="padding">' . $day . '&nbsp;</td>'; h 
     } 
    } 
} 

Antwort

1

nur die Anzahl der Tage im aktuellen Monat des Tages subtrahieren ist positiv:

else //if the current day is less or more than the total days in the month 
{ 
    if($day > 1){ 
     echo '<td class="padding">' . ($day - $total_days_of_current_month) . ' </td>';  // the next month 
    } else { 
     echo '<td class="padding">' . $day . ' </td>';  //then create a table cell with the current day of the month 
    } 
} 
+0

Dies funktioniert gut für die Zahlen, die über die Gesamtzahl der Tage in einem Monat sind, aber die Zahlen, die vor dem ersten Tag des Monats kommen, müssen 31, 30, 29 usw. sagen, aber das ist schwierig, weil einige Monate haben 30 Tage und einige Monate haben 31 Tage. – zeckdude

+0

Ich bin mir nicht sicher, was das Problem Chris ist. http://ca2.php.net/manual/en/function.date.php 't' gibt Ihnen die Anzahl der Tage im Monat. Ich muss nur ein bisschen nachdenken; all die harten Sachen sind dir schon von PHP gegeben. – mpen

1

Hier ist Teil einer I Kalenderfunktion vor kurzem schrieb, können Sie hoffentlich einige Ideen aus ihm heraus.

// $month is a UNIX timestamp 

// resetting to 1st of the month 
$date = getdate(mktime(0, 0, 0, date('n', $month), 1, date('Y', $month))); 

// resetting to first day in grid 
$date = getdate(strtotime("-$date[wday] days", $date[0])); 

$out = array(); 

$lastDay = mktime(0, 0, 0, date('n', $month), date('t', $month), date('Y', $month)); 

while ($date[0] <= $lastDay) { 

    $row = array(); 

    for ($x = 0; $x <= 6; $x++) { 
     $attr = array('class' => 'weekday '.low(date('D', $date[0]))); 
     if (date('n', $month) != $date['mon']) { 
      $attr['class'].= ' prevNextMonth'; 
     } 
     if (date('Y-m-d') == date('Y-m-d', $date[0])) { 
      $attr['class'].= ' today'; 
     } 

     $row[] = array($date['mday'], $attr); 

     $date = getdate(strtotime("+1 day", $date[0])); 
    } 

    $out[] = $row; 
} 

// makes table rows out of the array, considers the $attr array as well 
$out = $this->Html->tableCells($out); 
$out = sprintf('<table><tbody>%s</tbody></table>', $out); 
0

Sie brauchen nicht Steves bedingt: Statt

verwenden

echo '<td class="padding">' . date("j",mktime(12,0,0,$current_month,$day,$current_year)) . ' </td>';

Mktime Griffe sind out-of-Range-Termine meine sie in den nächsten oder vorherigen Monat zu bewegen, das ist genau das, was Sie wollen .

Verwandte Themen