2015-08-30 3 views
-2

У меня есть код выше с сайта.com. Все работает хорошо, за исключением августа 2015 года. Дата начала должна быть в субботу, но календарь показывает понедельник вместо этого. Другие месяцы, которые я проверил до сих пор, верны.PHP Календарь с неправильной датой начала августа 2015 года

Подсказка?

<?php 
function calendar() { 
    date_default_timezone_set('UTC'); 
    $date = time(); // it was removed orginally. 
    if (ISSET($_REQUEST['emonth'])&& ISSET($_REQUEST['eyear'])){ 
     $month = $_REQUEST['emonth']; 
     $year = $_REQUEST['eyear']; 
    } else { 
    $month = date('m', $date); 
    $year = date('Y', $date); 
    } 

    $first_day = mktime(0,0,0,$month, 1, $year); 
    echo date('D', $first_day); 

    $title = date('F', $first_day); 

    $day_of_week = date('D', $first_day); 

    switch($day_of_week){ 
     case "Sun": $blank = 0; break; 
     case "Mon": $blank = 1; break; 
     case "Tue": $blank = 2; break; 
     case "Wed": $blank = 3; break; 
     case "Thu": $blank = 4; break; 
     case "Fri": $blank = 5; break; 
     case "Sar": $blank = 6; break; 
    } 

    $days_in_month = cal_days_in_month(0, $month, $year); 

     echo '<table class="event"> 
        <tr> 
         <td colspan="7">'.$title.'-'.$year.'</td> 
        </tr><tr> 
         <th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th> 
        </tr>'; 

    $day_count = 1; 
    echo '<tr>'; 
    while ($blank > 0) { 
     echo '<td></td>'; 
     $blank = $blank-1; 
     $day_count++; 
    } 

    $day_num = 1; 

    while ($day_num <= $days_in_month){ 
     echo "<td>$day_num</td>"; 
     $day_num++; 
     $day_count++; 

     if ($day_count > 7) { 
      echo '</tr><tr>'; 
      $day_count = 1; 
      while ($day_count > 1 && $day_count <= 7) { 
       echo '<td></td>'; 
       $day_count++; 
      } 
     } 
    } 

       echo '</tr> 
          </table>'; 
} 

calendar(); 

?> 

решаемые

Был опечатка Sar вместо СБ в случае переключения. Поскольку он работал в течение большей части месяцев, которые я проверил, я не обратил на это внимания. Теперь он работает после коррекции.

Спасибо ребята

+0

'$ month = date ('m', $ date); $ year = date ('Y', $ date); '.... где определена' $ date'? –

+2

Поскольку на строке 'case" Sar есть опечатка: $ blank = 6; break; ', это должно быть« case »Sat»: $ blank = 6; перерыв; '. –

+0

@MarkBaker Нет, вот почему это бросает ошибку извещения PHP. Он должен либо определить его, либо просто удалить его, чтобы получить «сегодняшний» месяц и год. –

ответ

1

Вы не задающие $date - хотя его даже не обязательно в вашем примере. date() функция будет по умолчанию сегодня, если нет второй параметр не передается в. (Также isset может взять разделенный запятыми список переменных, чтобы быть чище)

if (isset($_REQUEST['emonth'],$_REQUEST['eyear'])){ 
    $month = $_REQUEST['emonth']; 
    $year = $_REQUEST['eyear']; 
} else {   
    $month = date('m'); 
    $year = date('Y'); 
} 

Кроме того, как уже упоминалось в комментариях, у вас есть опечатка в ваш оператор switch, который предотвратил бы совпадение на «Сб».

+0

Да, вы правы. Для даты $ я намеренно удалил ее из сообщения, так как не нашел нужным. Поскольку он работал большую часть месяцев, поэтому я не обратил внимания на оговорку коммутатора –

Смежные вопросы