Календарь PHP: повторять выбранные месяцы? - PullRequest
0 голосов
/ 09 декабря 2011

смотрел на это немного, и теперь мои глаза пересеклись. :)

У меня есть скрипт календаря, который я нашел на snipplr.com Это довольно мило. Реквизит для создателей. Теперь у меня есть две вещи, которые я хочу настроить.

Прямо сейчас календарь выплевывает 12 месяцев, с января по декабрь. А также неделя заканчивается в воскресенье (грррр). Я пытаюсь сделать так, чтобы это продолжалось с ЭТОГО МЕСЯЦА, плюс х количество месяцев. Например, будет отображаться декабрь плюс еще 5 месяцев, поэтому декабрь, январь, февраль, март, апрель, май.

Я могу сказать в коде, что он использует итерацию $ i, чтобы пройти месяцы и отобразить соответствующие даты. для ($ = 1; $ г <= 11; $ я ++) </p>

ТАК, я попытался изменить это так: for ($ i = $ this_month; $ i <= 11; $ i ++) <br> $ this_month - дата ('m');

Он успешно отображает декабрь, но не месяцы после него. (Так как он останавливается на 11). Но если я увеличу 11 до другой переменной $ this_month + 5, то сценарий не будет знать, что такое 13, 14 и 15 месяцев.

Любая помощь в этом? Вот весь сценарий, который у меня есть, таким образом.

function days_in_month($month, $year) {
    if($month!=2) {
        if($month==9||$month==4||$month==6||$month==11)
            return 30;
        else
            return 31;
    }
    else
        return $year%4==""&&$year%100!="" ? 29 : 28;
}

global $months;
$months = array(0 => 'January', 1 => 'February', 2 => 'March', 3 => 'April', 4 => 'May', 5 => 'June', 6 => 'July', 7 => 'August', 8 => 'September', 9 => 'October', 10 => 'November', 11 => 'December');
$days = array(0 => 'Monday', 1 => 'Tuesday', 2 => 'Wednesday', 3 => 'Thursday', 4 => 'Friday', 5 => 'Saturday', 6 => 'Sunday');

function render_calendar($this_year = null) {
    if($this_year==null)
        $this_month = date('m')-1;
        $first = strtotime(date('m'));
        $last = strtotime("+6 months", $this_month);
        $this_year = date('Y');

    $day_of_the_month = date('N', strtotime('1 January '.$this_year));
    for($i=$this_month;$i<=12;$i++) {

//      echo $i;
//      if ($i==12) {
//          $i = 0;
//      }
        echo $i;
        echo "<table>
            <caption>".$GLOBALS['months'][$i]."</caption>
            <thead>
                <tr>
                    <th>Sun</th>
                    <th>Mon</th>
                    <th>Tue</th>
                    <th>Wed</th>
                    <th>Thu</th>
                    <th>Fri</th>
                    <th>Sat</th>

                </tr>
            </thead>
            <tbody>
                <tr>";
        for($n=1;$n<$day_of_the_month;$n++)
            echo "<td></td>\n";
        $days = days_in_month($i+1, $this_year);
        $day = 0;       
        while($day<$days) {
            if($day_of_the_month==8) {
                echo ($day == 0 ? "" : "</tr>\n") . "<tr>\n";
                $day_of_the_month = 1;
            }
            echo "<td style=\"border: 1px solid red;\">" . ($day+1) . "</td>\n";
            $day_of_the_month++;
            $day++;
        }
        echo "</tr>
            </tbody>
        </table>";
    }
}

1 Ответ

1 голос
/ 09 декабря 2011

Как насчет этого для вашего цикла:

for($i=$this_month;$i<=$this_month+5;$i++) {
    // create a variable to hold the proper month index
    $currentMonth = $i;
    if ($i>11) {
        $currentMonth -= 12;
    }
    // now replace all references to the $i index with $currentMonth
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...