Как сделать так, чтобы числа, превышающие общее количество дней в месяце, отображались как числа нового месяца? - PullRequest
0 голосов
/ 20 августа 2009

У меня есть php календарь на http://idea -palette.com / aleventcal / calendar.php . Я хочу, чтобы дни, которые не являются частью текущего месяца, отображались серым цветом (что происходит сейчас), и я хочу, чтобы они отображались как дни предыдущего и следующего месяца.

Как и сейчас, дни, которые появляются до первого дня месяца, отображаются в виде отрицательных чисел (-1, -2, -3 и т. Д.), А дни, которые появляются после последнего дня месяца, просто продолжайте, так что если месяц заканчивается 31-го числа, то он будет читать 32, 33, 34 и т. д.

Я пытаюсь вычислить условный оператор с помощью какого-то цикла, где я могу увидеть, превышает ли он общее количество дней, а затем сделать что-то еще. Проблема, которую я вижу, заключается в том, что создаваемая ячейка таблицы зацикливается, поэтому, если я просто сделаю $ day + 1, то вместо 32 она будет просто читать 33.

Вот мой код:

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
        }
    }
}

Ответы [ 3 ]

1 голос
/ 20 августа 2009

Вот часть функции календаря, которую я недавно написал, надеюсь, вы можете получить некоторые идеи из нее.

// $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);
1 голос
/ 20 августа 2009

просто вычесть количество дней в текущем месяце дня, является положительным:

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 голосов
/ 05 сентября 2009

Вам не нужно условие Стива: вместо этого используйте

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

mktime обрабатывает даты, выходящие за пределы допустимого диапазона, когда я перемещаю их в следующий или предыдущий месяц, и это именно то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...