Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Календарные функции
 
 автор: Felix   (27.01.2006 в 05:20)   письмо автору
 
 

Функция date() выводит день, месяц, год и время а есть ли какакя нибудь функция для вывода календаря за один месяц ???
Мне нужно в браузер вывести календарь за месяц причем если наступает следующий месяц то календарь соответственно должен быть уже за следующий (короче всегда актуальный).

   
 
 автор: localGhost   (27.01.2006 в 05:37)   письмо автору
 
   для: Felix   (27.01.2006 в 05:20)
 

в пхп такой функции нет.. придеться либо искать готовое решение (думаю таких не мало), либо самому изобретать

   
 
 автор: WebTech   (27.01.2006 в 11:25)   письмо автору
 
   для: Felix   (27.01.2006 в 05:20)
 

Предлагаю самодельную функцию. Может не очень изящно, но работает :-)

<?php
function month_print($y$m)
// $m - месяц  в формате 1, 2, 3, ..., 12
// $y - год в формате четырехзначного числа
{
// определяем номер дня недели первого числа месяца
$weekday_1 getdate(mktime(000$m1$y));
$weekday_1 $weekday_1['wday'];
if (
$weekday_1 == 0$weekday_1 7// если номер дня недели 0 (ВС), делаем его 7
$days days_in_month($m$y); // определяем количество дней в месяце
echo '<table>';
echo 
'  <tr>';
echo 
'    <th>ПН</th><th>ВТ</th><th>СР</th><th>ЧТ</th><th>ПТ</th><th>СБ</th><th>ВС</th>';
echo 
'  </tr>';
$day 1
for (
$rows=1$rows<=6$rows++)
{
echo 
'  <tr>';
  for (
$cols=1$cols<=7$cols++)
  {
  
$d $day $weekday_1 1;
  if (
$d <= 0$d '&nbsp;';
    echo 
'<td align="right">'.$d.'</td>';
  
$day $day 1;
  if (
$d >= $days) break;
  }
echo 
'  </tr>';
if (
$d >= $days) break;
}
echo 
'</table>';
}

function 
days_in_month($month$year)
{
$days_in_month[1] = 31
$days_in_month[2] = 28
$days_in_month[3] = 31
$days_in_month[4] = 30
$days_in_month[5] = 31
$days_in_month[6] = 30
$days_in_month[7] = 31
$days_in_month[8] = 31
$days_in_month[9] = 30
$days_in_month[10] = 31
$days_in_month[11] = 30
$days_in_month[12] = 31
$days $days_in_month[$month];
if (
$year/== ceil($year/4) and $days == 28// проверяем високосный год
  
{
  
$days 29;
  return 
$days// если високосный и месяц февраль, то прибавляем 1, т.е. число дней 29
  
}
  else
    {
    return 
$days;
    }
}
?>

Функции надо передать год в форме четырехзначного числа и месяц в форме 1,2,3, ..., 12. Неделя начинается с понедельника

   
 
 автор: Felix   (27.01.2006 в 12:38)   письмо автору
 
   для: WebTech   (27.01.2006 в 11:25)
 

Чето не работает. я в начале скрипта написал

$y=date("Y");
$m=date("m");

и не работает... странно ... главное не ругается и не выводит ничего....
кстати что ето за строка ?

echo '    <th>ПН</th><th>ВТ</th><th>СР</th><th>ЧТ</th><th>ПТ</th><th>СБ</th><th>ВС</th>';

можнт быть вот так было бы правильнее :)

echo '    <td>ПН</td><td>ВТ</td><td>СР</td><td>ЧТ</td><td>ПТ</td><td>СБ</td><td>ВС</td>'; 

но один черт не работает.....

   
 
 автор: WebTech   (27.01.2006 в 12:58)   письмо автору
 
   для: Felix   (27.01.2006 в 12:38)
 

Нужно месяц без ведущего нуля

$y=date("Y"); 
$m=date("n");
month_print($y, $m);

Тег <th></th> выводит заголовок столбца таблицы. Это просто жирный шрифт. В принципе не важно :-)

   
 
 автор: Felix   (01.02.2006 в 10:20)   письмо автору
 
   для: WebTech   (27.01.2006 в 12:58)
 

спасибо календарь заработал, только вот почему если мне надо вывести календарь в случае наличия определенной переменной то он не работает ? Ругается на month_print($y, $m);
Примерно так выглядит:


<?php
if(isset($_POST['go']))
{
$y=date("Y"); 
$m=date("n"); 
month_print($y$m);
function 
month_print($y$m
// $m - месяц  в формате 1, 2, 3, ..., 12 
// $y - год в формате четырехзначного числа 

// определяем номер дня недели первого числа месяца 
$weekday_1 getdate(mktime(000$m1$y)); 
$weekday_1 $weekday_1['wday']; 
if (
$weekday_1 == 0$weekday_1 7// если номер дня недели 0 (ВС), делаем его 7 
$days days_in_month($m$y); // определяем количество дней в месяце 
echo '<table>'
echo 
'  <tr>'
echo 
'    <th>ПН</th><th>ВТ</th><th>СР</th><th>ЧТ</th><th>ПТ</th><th>СБ</th><th>ВС</th>'
echo 
'  </tr>'
$day 1
for (
$rows=1$rows<=6$rows++) 

echo 
'  <tr>'
  for (
$cols=1$cols<=7$cols++) 
  { 
  
$d $day $weekday_1 1
  if (
$d <= 0$d '&nbsp;'
    echo 
'<td align="right">'.$d.'</td>'
  
$day $day 1
  if (
$d >= $days) break; 
  } 
echo 
'  </tr>'
if (
$d >= $days) break; 

echo 
'</table>'


function 
days_in_month($month$year

$days_in_month[1] = 31
$days_in_month[2] = 28
$days_in_month[3] = 31
$days_in_month[4] = 30
$days_in_month[5] = 31
$days_in_month[6] = 30
$days_in_month[7] = 31
$days_in_month[8] = 31
$days_in_month[9] = 30
$days_in_month[10] = 31
$days_in_month[11] = 30
$days_in_month[12] = 31
$days $days_in_month[$month]; 
if (
$year/== ceil($year/4) and $days == 28// проверяем високосный год 
  

  
$days 29
  return 
$days// если високосный и месяц февраль, то прибавляем 1, т.е. число дней 29 
  

  else 
    { 
    return 
$days
    } 

}
?>

   
 
 автор: WebTech   (01.02.2006 в 13:15)   письмо автору
 
   для: Felix   (01.02.2006 в 10:20)
 

А как ругается?
Попробуй переписать так

<?php 
if(isset($_POST['go'])) 

$y=date("Y"); 
$m=date("n"); 
month_print($y$m);
}
function 
month_print($y$m
// $m - месяц  в формате 1, 2, 3, ..., 12 
... далее остальной скрипт функции

т.е. надо вынести определение функции из блока IF

   
 
 автор: P@Sol   (01.02.2006 в 14:06)   письмо автору
3.5 Кб
 
   для: Felix   (27.01.2006 в 05:20)
 

на многих сайтах видел такое (см. приложение). как такое делают??? особенно интересует форма

   
 
 автор: WebTech   (01.02.2006 в 14:37)   письмо автору
 
   для: P@Sol   (01.02.2006 в 14:06)
 

Это, однако, очень сильно похоже на элемент управления ActiveX :-) Или что-то вроде того. На вряд ли JavaScript.
Наверняка такие штуки можно найти в сети.

   
 
 автор: Felix   (01.02.2006 в 17:22)   письмо автору
 
   для: WebTech   (01.02.2006 в 14:37)
 

WebTech, спасибо! Все заработало :)

   
 
 автор: Felix   (02.02.2006 в 12:58)   письмо автору
 
   для: WebTech   (01.02.2006 в 14:37)
 

Здравствуйте WebTech, я немного переделал ваш календарь под свои нужды


<form action="kalendar.php" method="POST">
<table border='1'>
    <tr>
        <td colspan='2' align='center'><font color='#ff0000'>Календарь</font></td>
    </tr>
    <tr>
        <td align="center">Год:</td>
        <td align="center">
            <SELECT name="year" size="1">
            <OPTION selected value='2006'> 2006</OPTION>
            <OPTION value='2007'> 2007</OPTION>
            <OPTION value='2008'> 2008</OPTION>
            <OPTION value='2009'> 2009</OPTION>
            <OPTION value='2010'> 2010</OPTION>
            <OPTION value='2011'> 2011</OPTION>
            <OPTION value='2012'> 2012</OPTION>
            <OPTION value='2013'> 2013</OPTION>
            <OPTION value='2014'> 2014</OPTION>
            <OPTION value='2015'> 2015</OPTION>
            </SELECT>
        </td>
    </tr>
    <tr>
        <td align="center">Месяц:</td>
        <td align="center">
            <SELECT name="mount" size="1">
            <OPTION selected value="1"> Январь</OPTION>
            <OPTION value="2"> Февраль</OPTION>
            <OPTION value="3"> Март</OPTION>
            <OPTION value="4"> Апрель</OPTION>
            <OPTION value="5"> Май</OPTION>
            <OPTION value="6"> Июнь</OPTION>
            <OPTION value="7"> Июль</OPTION>
            <OPTION value="8"> Август</OPTION>
            <OPTION value="9"> Сентябрь</OPTION>
            <OPTION value="10"> Октябрь</OPTION>
            <OPTION value="11"> Ноябрь</OPTION>
            <OPTION value="12"> Декабрь</OPTION>
            </SELECT>
        </td>
    </tr>
    <tr>
        <td colspan="2" align="center"><input type="submit" name="kal" value="Показать"></td>
    </tr>
</table>
</form>
<?
//////////////////////////////////////////////////////////////////////////////////////////
include("../autoriz/config.php");
if(isset(
$_POST['go']))
{
$ch $_POST['check'];
    foreach(
$ch as $key => $val)
    {
          
#$day=array_shift($_POST['day']);
    
print "$key -> $val <br>";
    
    
#mysql_query("UPDATE kalendary SET off_day='".$val."' WHERE day='".$day."' and mount='".$_POST['mount']."' and year='".$_POST['year']."'", $dbcnx) or die(MySQL_Error());
    
}
}
//////////////////////////////////////////////////////////////////////////////////////////
if(isset($_POST['kal']))
{
$y=$_POST['year'];
$m=$_POST['mount'];
month_print($y$m);
}
function 
month_print($y$m)
{
// определяем номер дня недели первого числа месяца
$weekday_1 getdate(mktime(000$m1$y)); 
$weekday_1 $weekday_1['wday']; 
if (
$weekday_1 == 0$weekday_1 7// если номер дня недели 0 (ВС), делаем его 7 
$days days_in_month($m$y); // определяем количество дней в месяце 
echo '<form action="kalendar.php" method="POST"><table border="1" bgcolor="#200060">'
echo 
'  <tr bgcolor="#004000">'
echo 
'    <th>ПН</th><th>ВТ</th><th>СР</th><th>ЧТ</th><th>ПТ</th><th>СБ</th><th>ВС</th>'
echo 
'  </tr>'
print
"<input type='hidden' name='mount' value='".$m."'><input type='hidden' name='year' value='".$y."'>";
$day 1
for (
$rows=1$rows<=6$rows++)

echo 
'  <tr>'
  for (
$cols=1$cols<=7$cols++)
  { 
  
$d $day $weekday_1 1;
  if (
$d <= 0$d '&nbsp;';
  if (
$d <= '&nbsp;'
  {
  echo 
'<td align="right">'.$d.'';
  }
    else
    {
    echo 
'<td align="right"';
      
$off=mysql_query("SELECT off_day FROM kalendary WHERE day='".$d."' && mount='".$_POST['mount']."' && year='".$_POST['year']."'");if(!$off) exit(mysql_error());
      while(
$off_day=mysql_fetch_assoc($off))
      {
          if(
$off_day['off_day']=='checked')
          {
          print
" bgcolor='#a00000'><b>".$d."</b><input type='hidden' name='day[]' value='".$d."'>";
          }
          else
          {
          print
" ><b>".$d."</b><input type='hidden' name='day[]' value='".$d."'>";
          }
      }
      
$tm=mysql_query("SELECT * FROM kalendary WHERE day='".$d."' && mount='".$_POST['mount']."' && year='".$_POST['year']."'");
          while(
$tim=mysql_fetch_assoc($tm))
          {
          print
"<INPUT type='checkbox' name='check[]' value='' ".$tim['off_day'].">";
          }
     }
    print
'</SELECT></td>';
  
$day $day 1
  if (
$d >= $days) break; 
  }
echo 
'  </tr>'
if (
$d >= $days) break; 

echo 
'</table><br><input type="submit" name="go" value="Сохранить"></form>'

function 
days_in_month($month$year

$days_in_month[1] = 31
$days_in_month[2] = 28
$days_in_month[3] = 31
$days_in_month[4] = 30
$days_in_month[5] = 31
$days_in_month[6] = 30
$days_in_month[7] = 31
$days_in_month[8] = 31
$days_in_month[9] = 30
$days_in_month[10] = 31
$days_in_month[11] = 30
$days_in_month[12] = 31
$days $days_in_month[$month]; 
if (
$year/== ceil($year/4) and $days == 28// проверяем високосный год 
  

  
$days 29
  return 
$days// если високосный и месяц февраль, то прибавляем 1, т.е. число дней 29 
  

  else 
    { 
    return 
$days
    } 
}
?>


Подскажите почему в строке

 print "$key -> $val <br>"; ,


я не вижу вывода отмеченных мною чекбоксов ?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования