Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 3
Регистрация: 04.03.2012
Сообщений: 126
1

Календарь

02.06.2012, 00:42. Показов 1062. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В книге там прохожу немного даты и такой окд, вроде все верно написал, но он ругается на второй орич в конце кода непонятно почему.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
//echo '<pre>'.print_r(getdate(),1).'</pre>';
function Calendar($year,$month){
$wday = JDDayofWeek(GregorianToJD($month,1,$year),0);
if($wday == 0) $wday = 7;
$n = - ($wday - 2);
$cal = array();
    for($j = 0; $j < 6; $j++){
        $row = array();
        $notEmpty = false;
        for($x = 0; $x < 7; $x++,$n++){
        if(checkdate($month,$n,$year)){
        $row[] = $n;
        $notEmpty = true;       
            } else{ $row = ''; }
        }
    if(!$notEmpty) break;
    $cal[] = $row;
    }
    return $cal;
}
//Формируем календарь на текущий месяц
$now = getdate();
$cal = Calendar($now['year'],$now['mon']-1);
?>
<!-- Шаблон вывода календаря -->
<table border="1">
    <tr>
        <td>Пн</td>
        <td>Вт</td>
        <td>Ср</td>
        <td>Чт</td>
        <td>Пт</td>
        <td>Сб</td>
        <td style="color:red">Вс</td>
    </tr>
    <? foreach ($cal as $row) {?>
    <tr>
    <? foreach ($row as $i=>$v){?>
    <td style="<?=$i==6?'color:red':''?>">
        <?=$v? $v : '&nbsp;'?>
    </td>
    <? } ?>
    </tr>
    <? } ?>
</table>
PHP
1
Warning: Invalid argument supplied for foreach() in C:\www\htdocs\test.ru\www\index.php on line 39
Добавлено через 32 минуты
Я так понял из-за вот этого места может for($j = 0; $j < 6; $j++){
Если написать там for($j = 0; $j < 5; $j++){ тогда выведет без ошибки, но выведет не все рабочие дни этого месяца.

Добавлено через 1 час 13 минут
Вот взял исходник, нашел папку этого календаря и выдает что 1 июня это воскресенье, что за бред? Автор книги ошибся что ли?
Что может не правильно быть в коде, как-то странно. Вот оригинал автора с книги. Вот на сервер забросил результат http://santa.comoj.com/
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php ## Календарь на текущий месяц.
// Функция формирует двумерный массив, представляющий собой
// календарь на указанный месяц и год. Массив состоит из строк,
// соответствующих неделям. Каждая строка - массив из семи 
// элементов, которые равны числам (или пустой строке, если
// данная клетка календаря пуста).
function makeCal($year, $month) {
  // Получаем номер дня недели для 1 числа месяца. Корректируем 
  // его, чтобы воскресенье соответствовало числу 7, а не числу 0.
  $wday = JDDayOfWeek(GregorianToJD($month, 1, $year), 0);
  if ($wday == 0) $wday = 7;
  // Начинаем с этого числа в месяце (если меньше нуля 
  // или больше длины месяца, тогда в календаре будет пропуск).
  $n = - ($wday - 2);
  $cal = array();
  // Цикл по строкам.
  for ($y=0; $y<6; $y++) {
    // Будущая строка. Вначале пуста.
    $row = array();
    $notEmpty = false;
    // Цикл внутри строки по дням недели.
    for ($x=0; $x<7; $x++, $n++) {
      // Текущее число >0 и < длины месяца?
      if (checkdate($month, $n, $year)) {
        // Да. Заполняем клетку.
        $row[] = $n;
        $notEmpty = true;
      } else {
        // Нет. Клетка пуста.
        $row[] = "";
      }
    }
    // Если в данной строке нет ни одного непустого элемента,
    // значит, месяц кончился.
    if (!$notEmpty) break;
    // Добавляем строку в массив.
    $cal[] = $row;
  }
  return $cal;
}
 
// Формируем календарь на текущий месяц.
$now = getdate();
$cal = makeCal($now['year'], $now['mon']-1);
?>
<!-- Шаблон вывода календаря. -->
<table border=1>
  <tr>
    <td>Пн</td>
    <td>Вт</td>
    <td>Ср</td>
    <td>Чт</td>
    <td>Пт</td>
    <td>Сб</td>
    <td style="color:red">Вс</td>
  </tr>
  <!-- цикл по строкам -->
  <?foreach ($cal as $row) {?>
    <tr>
      <!-- цикл по столбам -->
      <?foreach ($row as $i=>$v) {?>
        <!-- воскресенье - "красный" день -->
        <td style="<?=$i==6? 'color:red' : ''?>">
          <?=$v? $v : "&nbsp;"?>
        </td>
      <?}?>
    </tr>
  <?}?>
</table>
Добавлено через 20 часов 14 минут
Вроде работает, не совсем въехал в эту строку, объясните её если кто может.

PHP
1
  $wday = JDDayOfWeek(GregorianToJD($month, 1, $year), 0);
Добавлено через 3 часа 17 минут
Вроде разобрался, возращается день недели, а вот здесь Не могу понять, почему здесь -2?
Код
 $n = - ($wday - 2);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2012, 00:42
Ответы с готовыми решениями:

Календарь
Всем привет, очень нужна ваша помощь. У меня есть php скрипт который получает данные в виде списка...

Календарь
необходимо разработать календарь на месяц без использования встроенных функций php date с...

Календарь на php
Вообщем у меня проблема, мне надо сделать календарь и чтобы при нажатии на какуе-либо дату...

Календарь на php
Кому не трудно напишите код календаря на php.ОЧЕНЬ НАДО

0
02.06.2012, 00:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2012, 00:42
Помогаю со студенческими работами здесь

Технический календарь
Как сделать технический календарь. В котором при нажатии на день недели можно было ввести данные?

Календарь на PHP
Доброе время суток, столкнулся с такой проблемой изменение календаря на PHP &lt;? $m = (!$m) ?...

Календарь на php
есть скрипт календаря &lt;?php ################################################ ...

Нестандартный календарь
Как написать календарь именно нужен пример кода именно по параметрам Определение календаря: -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru