Основные возможности:

  • Подсветка дней недели, текущего дня;
  • Выбор года и месяца;
  • Заполнение указанного поля формы выбранной датой.

Пример создания PHP календаря для WEB страницы.

 Календарь на PHP

Пример html файла с формой и календарем:

(Скачать файл можно будет здесь. ЗЫ Не тыкать! Жать правой кнопкой: сохранить ссылку как...)

Требования к системе:

Разработка и проверка календаря проводилась на Apache 2.2.4 + PHP 5.2.

Текст:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Календарь</title>
<style type="text/css">
 
INPUT.text {
 border: 1px solid #ccc; /* Исходная рамка вокруг поля */
 /* Ширина поля */
 /*width: 100%;*/
}
INPUT.text:focus {
 border: 1px solid #39c; /* Рамка при получении фокуса */
}
 
</style>
</head>
<body>
    <td valign='top'>
        <table border='1'>
            <tr>
                <td bgcolor='gray'>
                    Дата
                </td>
            </tr>
            <tr>
                <td>
<!-- Блок календаря //-->
 
<?php
 
/*Вызов календаря*/
calendar('form1','ChoiseD');
 
function &amp;calendar($FormName,$InputName)
{
/*Календарь*/
/*
    Параметры:
    $FormName - имя формы с которой будет работать календарь;
    $InputName - имя поля в данной форме, в которое будет возвращено значение выбранной даты.
*/
 
$menu = array(
    "1,Январь",
    "2,Февраль",
    "3,Март",
    "4,Апрель",
    "5,Май",
    "6,Июнь",
    "7,Июль",
    "8,Август",
    "9,Сентябр",
    "10,Октябрь",
    "11,Ноябрь",
    "12,Декабрь"
    );
 
$date = new DateTime(strftime("%Y-%m-%d"));
$CurDay = date_format($date,"j");
$FCurDay = date_format($date,"d");
$CurMonth = date_format($date,"n");
$FCurMonth = date_format($date,"m");
$CurYear = date_format($date,"Y");
$ChValue = "$CurYear-$FCurMonth-$FCurDay";
if ((isset($_POST['SetMonth'])) &amp;&amp; ($_POST['SetMonth'] != $CurMonth) ) {
  $DeltaMonth = $_POST['SetMonth']-$CurMonth;
  /* Проверка на 28 дней */
  $d28 = $CurDay-28;
  if ($d28 > 0) {
    $modif = "-$d28 day";
    $date -> modify($modif);
  }
  /* Конец проверки */
  $modif = "$DeltaMonth month";
  if ($DeltaMonth > 0) $modif = "+$modif";
  $date -> modify($modif);
}
if ( (isset($_POST['SetYear'])) &amp;&amp; ($_POST['SetYear'] != $CurYear) ) {
   $DeltaYear = $_POST['SetYear']-$CurYear;
   $modif = "$DeltaYear year";
   if ($DeltaYear > 0) $modif = "+$modif";
   $date -> modify($modif);
}
if ( (isset($_POST['ChoiseD'])) ) {
    $ChValue = $_POST['ChoiseD'];
}
 
$NewMonth = date_format($date,"n");
$FNewMonth = date_format($date,"m");
$NewYear = date_format($date,"Y");
print "<form name='Calendar' action='' method='POST'>\n";
print "<table>\n";
print "\t<tr>\n";
print "\t<td>\n";
print "\t<select name='SetMonth' onchange='this.form.submit()'>\n";
foreach ($menu as $value) {
    $submenu = preg_split("/\,/", $value);
    $selected = "";
    if ($submenu[0] == $NewMonth) $selected = "selected";
    print "\t\t<option $selected value = '$submenu[0]'>$submenu[1]</option>\n";
}     
print "\t</select>\n";
print "\t</td>\n";
print "\t<td>\n";
print "\t<input type='button' value='<' size=1 onclick='SetYear.value=$NewYear-1; this.form.submit()' />\n";
print "\t<input type='text' name='SetYear' value='$NewYear' size=4 maxlength=4 readonly />\n";
print "\t<input type='button' value='>' size=1 onclick='SetYear.value=$NewYear+1; this.form.submit()' />\n";
print "\t</td>\n";
print "\t</tr>\n";
print "</table>\n";
print "<table border='1'>\n";
$mnth = $NewMonth;
print "\t<tr bgcolor=#D3D3D3><td>Пн</td><td>Вт</td><td>Ср</td><td>Чт</td><td>Пт</td><td>Сб</td><td>Вс</td></tr>\n";
$i=1;
$j=1;
print "\t<tr>\n";
$LastDay = date_format($date,"j");
$DeltaDay = $LastDay-$j;
$modifm = "-$DeltaDay day";
$date -> modify($modifm);
while ($mnth == $NewMonth) {
  $LastDay = date_format($date,"j");
  $FLastDay = date_format($date,"d");
  $dw = date_format($date,"w");
  if ($dw == $i) {
    if (($LastDay == $CurDay) &amp;&amp; ($CurMonth == $NewMonth) &amp;&amp; ($CurYear == $NewYear) ) {
      $color="#99CC00";
    } else if (($i == 0) | ($i == 6)) {
      $color="#FF9900";
    } else {
      $color="#FFFFFF";
    }
    print "\t<td bgcolor=$color
    onmouseover=\"this.style.backgroundColor='blue'; this.style.color='white'\"
    onmouseout=\"this.style.backgroundColor='$color'; this.style.color='black'\"
    onClick=\"$FormName.$InputName.value='$NewYear-$FNewMonth-$FLastDay'\">$LastDay</td>\n";
    $modifp = "+1 day";
    $date -> modify($modifp);
    $j++;
  } else {
    if (($i == 0) | ($i == 6)) {
      $color="#FF9900";
    } else {
      $color="#FFFFFF";
    }
    print "\t<td bgcolor=$color></td>\n";
  }
  $mnth = date_format($date,"n");
  $i++;
  if ($i == 1) print "\t</tr>\n\t<tr>\n";  
  if ($i > 6) {
    $i=0;
  }
}
print "\t</tr>\n";
print "</table>\n";
print "</form>\n";
/*Конец календаря*/
}
?>
 
<!-- Конец блока календаря //-->
                </td>
            </tr>
            <tr>
                <td bgcolor='gray'>
                    <!-- Начало формы 1 //-->
                    <form name='form1' action='' method='post'>
                        Дата выбрана: <input type='text' name='ChoiseD' maxlength=10 size=8 readonly value='' class='text'>
                    </form>
                    <!-- Конец формы 1 //-->
                </td>
            </tr>
        </table>
    </td>
</body>
</html>