Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.05.2012, 23:24
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

Календарь на пхп
В книге там прохожу немного даты и такой окд, вроде все верно написал, но он ругается на второй орич в конце кода непонятно почему.
<?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>


Warning: Invalid argument supplied for foreach() in C:\www\htdocs\test.ru\www\index.php on line 39
Ответить с цитированием
  #2 (permalink)  
Старый 31.05.2012, 23:57
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

Я так понял из-за вот этого места может for($j = 0; $j < 6; $j++){
Если написать там for($j = 0; $j < 5; $j++){ тогда выведет без ошибки, но выведет не все рабочие дни этого месяца.
Ответить с цитированием
  #3 (permalink)  
Старый 01.06.2012, 00:00
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от kilogram
} else{ $row = ''; }
в этом случае $row не массив, и поэтому его нельзя перебрать
Ответить с цитированием
  #4 (permalink)  
Старый 01.06.2012, 00:20
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

Если изменить эту строку на такую
Код:
} else{ $row = array(); }
ошибок нет, но и вывод не все 31 числа, а только 29
Ответить с цитированием
  #5 (permalink)  
Старый 01.06.2012, 00:29
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

попробуйте выполнить свою программу по шагам на листочке, чтобы найти ошибку
Ну или подебажьте в конце-то концов
Ответить с цитированием
  #6 (permalink)  
Старый 01.06.2012, 01:10
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

Вот взял исходник, нашел папку этого календаря и выдает что 1 июня это воскресенье, что за бред? Автор книги ошибся что ли?
Что может не правильно быть в коде, как-то странно. Вот оригинал автора с книги. Вот на сервер забросил результат http://santa.comoj.com/
<?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>
Ответить с цитированием
  #7 (permalink)  
Старый 01.06.2012, 01:21
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от kilogram
Автор книги ошибся что ли?
ну в 10-й строке творится какая-то магия непонятная простым с мертным вроде меня.
намешаны в однку кучу григорианский и юлианский календари.
Ответить с цитированием
  #8 (permalink)  
Старый 01.06.2012, 21:31
Профессор
Отправить личное сообщение для kilogram Посмотреть профиль Найти все сообщения от kilogram
 
Регистрация: 19.03.2012
Сообщений: 163

Не могу понять, почему здесь -2?
Код:
 $n = - ($wday - 2);

Последний раз редактировалось kilogram, 02.06.2012 в 00:40.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Календарь. Интерфейс. venzh Элементы интерфейса 8 08.02.2012 13:28
jQuery календарь Moonlight jQuery 0 11.01.2012 23:11
Таймер вызывающий пхп функцию или как минимум посылающий какой-то параметр syegorius Общие вопросы Javascript 1 08.09.2010 17:12
джава и пхп zerg Общие вопросы Javascript 4 22.02.2009 18:57