[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: просто календарик:)
Ahmed
PHP
<?
 function 
makecal($year,$month)
  {
   global 
$wday
   
$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++)
      {
       if (
checkdate($month,$n,$year))
        {
         
$row[]=$n;
         
$notEmpty=true;
        }
       else {
$row[]="";} 
      }
// Конец цикла для $x
     
     
if (!$notEmpty) break;
     
$cal[]=$row
    }
// Конец цикла для $y
       
   
return $cal;  
  }
//Конец функции makecal

 
$now=getdate();
 
$cal=makecal($now['year'],$now['mon']); 
?> 
<html>
 <head>
  <title>Календарь</title>
  <style type="text/css">
  <!--
   table.calendar {
              border-width:2px 0px 0px 2px;
              border-style:solid;
              border-color:#969696;
              background-color:#9addff;
              text-align:center;
                  }

   td.calendar {
              border-width:0px 2px 2px 0px;
              border-style:solid;
              border-color:#969696;
              background-color:#9addff;
              text-align:center;
                  }
  //-->
  </style>
  
  <script type="text/javascript">
  <!--
   var monthes=new Array(12);
   monthes[1]=31;
   monthes[2]=29;
   monthes[3]=31;
   monthes[4]=30;
   monthes[5]=31;
   monthes[6]=30;
   monthes[7]=31;
   monthes[8]=31;
   monthes[9]=30;
   monthes[10]=31;
   monthes[11]=30;
   monthes[12]=31;

   var monthes_name=new Array(12);
   monthes_name[1]='Январь';
   monthes_name[2]='Февраль';
   monthes_name[3]='Март';
   monthes_name[4]='Апрель';
   monthes_name[5]='Май';
   monthes_name[6]='Июнь';
   monthes_name[7]='Июль';
   monthes_name[8]='Август';
   monthes_name[9]='Сентрябрь';
   monthes_name[10]='Октябрь';
   monthes_name[11]='Ноябрь';
   monthes_name[12]='Декабрь';

   var tec_god=<?=$now['year']?>;
   var day_week=<?=$wday?>;
   var tec_mon=<?=$now['mon']?>;

   var now_god=<?=$now['year']?>;
   var now_day=<?=$now['mday']?>;
   var now_mon=<?=$now['mon']?>;
   
   function check_year(god)
    {
     god=god-2008;
     if (god<0) {god=god*(-1)}
     if (god%4==0) {return true;}
     else {return false;}  
    }

   function next_month()
    { 
// Вычисляем в каким днем недели является последний день месяца
     day_week=(monthes[tec_mon]%7)+day_week-1;
     if (day_week>7){day_week-=7;}  
// Если день недели воскресенье, то номер следующего дня понедельник(1), т.к. счет id начинается с 0 buf=0
     if (day_week>6){day_week=1;var buf=0;}
     else {buf=day_week;day_week+=1;}
//Увеличиваем месяц
     tec_mon=tec_mon+1;   
// Если месяц больше чем 12 тогда месяц равен 1(январь) и текущий год тоже увеличивается
     if (tec_mon>12){tec_mon=1;tec_god+=1;} 
     var day=1;
// Проверяем год если он весокосный тогда в феврале 29 дней, иначе 28
  if (check_year(tec_god))
    {
     monthes[2]=29;
    }
   else
    {
     monthes[2]=28;
    }

// Меняем заголовок год и месяц
   document.getElementById('god').innerHTML="<b>"+tec_god+" "+monthes_name[tec_mon]+"</b>";
 
     for(var i=0;i<6;i++)
      { 
       for(var y=0;(y<7);y++,day++)
        { 
// Если day содержит число большее чем число дней в месяце или если y меньше чем buf(начало месяца), то заполняем ячейку //пустой строкой. Иначе кладем в ячейку текущий день.
         if ((y<buf)||(day>monthes[tec_mon])) {document.getElementById("cell_"+i+"_"+y).innerHTML="&nbsp";day-=1;}
          else {document.getElementById("cell_"+i+"_"+y).innerHTML=day;}

         if ((tec_god==now_god)&&(tec_mon==now_mon)&&(day==now_day))
          {
           document.getElementById("cell_"+i+"_"+y).style.background="#b718d4"; 
          }
         else
          {
           document.getElementById("cell_"+i+"_"+y).style.background="#9addff";
          }
        }  
       buf=0; 
      }   
    }


   function prev_month()
    { 
// Вычисляем каким днем недели является последний день предыдущего месяца
     if (day_week==0){day_week=1;}
     else
      if (day_week==1){day_week=7;}
      else {day_week=day_week-1;}
// Вычисляем каким днем недели является первый день предыдущего месяца
     if ((tec_mon-1)!=0) {day_week=day_week-(monthes[tec_mon-1]%7)+1;}
      else {day_week=day_week-(monthes[12]%7)+1;}   

     if (day_week==0){day_week=7;}
     else if (day_week<0){day_week=day_week+7;}
     buf=day_week-1;

//Уменьшаем месяц
     tec_mon=tec_mon-1;  

// Если месяц меньше 1 тогда месяц равен 12(декабрь) и текущий год уменьшается
     if (tec_mon<1){tec_mon=12;tec_god-=1;} 
     var day=1;
// Проверяем год если он весокосный тогда в феврале 29 дней, иначе 28
  if (check_year(tec_god))
    {
     monthes[2]=29;
    }
   else
    {
     monthes[2]=28;
    }

// Меняем заголовок год и месяц
   document.getElementById('god').innerHTML="<b>"+tec_god+" "+monthes_name[tec_mon]+"</b>";
 
     for(var i=0;i<6;i++)
      { 
       for(var y=0;(y<7);y++,day++)
        { 
// Если day содержит число большее чем число дней в месяце или если y меньше чем buf(начало месяца), то заполняем ячейку //пустой строкой. Иначе кладем в ячейку текущий день.
         if ((y<buf)||(day>monthes[tec_mon])) {document.getElementById("cell_"+i+"_"+y).innerHTML="&nbsp";day-=1;}
          else {document.getElementById("cell_"+i+"_"+y).innerHTML=day;}

         if ((tec_god==now_god)&&(tec_mon==now_mon)&&(day==now_day))
          {
           document.getElementById("cell_"+i+"_"+y).style.background="#b718d4"; 
          }
         else
          {
           document.getElementById("cell_"+i+"_"+y).style.background="#9addff";
          }
        }  
       buf=0; 
      }
    }
  //-->
  </script>
 </head>
 <body>

 <table class=calendar cellpadding="0" cellspacing="0">
  <tr>
   <td class=calendar><input id="prev_month" type="button" value="<< " style="width:30" onclick="prev_month()"></td>
   <td id="god" class=calendar colspan=5><b><?=$now['year']?>  
    <? 
     
switch ($now['mon'])
      {
       case 
1: echo "Январь</b>";break;
       case 
2: echo "Февраль</b>";break;
       case 
3: echo "Март</b>";break;
       case 
4: echo "Апрель</b>";break;
       case 
5: echo "Май</b>";break;
       case 
6: echo "Июнь</b>";break;
       case 
7: echo "Июль</b>";break;
       case 
8: echo "Август</b>";break;
       case 
9: echo "Сентрябрь</b>";break;
       case 
10: echo "Октябрь</b>";break;
       case 
11: echo "Ноябрь</b>";break;
       case 
12: echo "Декабрь</b>";break;
      } 
        
    
?>
   </td>
   <td class=calendar><input id="next_month" type="button" value=" >>" style="width:30" onclick="next_month()"></td>
  </tr>
  <tr>
   <td class=calendar style="background-color:#1895d4;">Пн.</td>
   <td class=calendar style="background-color:#1895d4;">Вт.</td>
   <td class=calendar style="background-color:#1895d4;">Ср.</td>
   <td class=calendar style="background-color:#1895d4;">Чт.</td>
   <td class=calendar style="background-color:#1895d4;">Пт.</td>
   <td class=calendar style="background-color:#1895d4;">Сб.</td>
   <td class=calendar style="background-color:#1895d4;">Вс.</td>
  </tr> 
  <? foreach($cal as $i1=>$row
      {
?>
  <tr>
   <? foreach($row as $i=>$v
       {
?>
    <td id="<?="cell_".$i1."_".$i?>" class=calendar style="<?=$i==6'color:red'''?>;
     <?
      
if ($now['mday']==$v)
       {
        
?>background-color:#b718d4;<?
       
}
     
?>">
     <?=$v?$v:"&nbsp;"?>
    </td>
     <?}?>                      
  </tr>
    <?}
    if (
count($cal)<6)
     { 
    
?>
  <tr>
   <td class=calendar id="cell_5_0">&nbsp</td>
   <td class=calendar id="cell_5_1">&nbsp</td>
   <td class=calendar id="cell_5_2">&nbsp</td>
   <td class=calendar id="cell_5_3">&nbsp</td>
   <td class=calendar id="cell_5_4">&nbsp</td>
   <td class=calendar id="cell_5_5">&nbsp</td>
   <td class=calendar id="cell_5_6">&nbsp</td>
   </tr>                          

   <?}?>
 </table>




Спустя 51 минута, 49 секунд (12.05.2009 - 15:38) FatCat написал(а):
Примерно то же самое на ХТМЛ:
HTML
<html><head></head><body>
<script LANGUAGE="JavaScript">
monthnames = new Array(
"Январь",
"Февраль",
"Март",
"Апрель",
"Май",
"Июнь",
"Июль",
"Август",
"Сентябрь",
"Октябрь",
"Ноябрь",
"Декабрь");
var linkcount=0;
function addlink(month, day, href) {
var entry = new Array(3);
entry[0] = month;
entry[1] = day;
entry[2] = href;
this[linkcount++] = entry;
}
Array.prototype.addlink = addlink;
linkdays = new Array();
monthdays = new Array(12);
monthdays[0]=31;
monthdays[1]=28;
monthdays[2]=31;
monthdays[3]=30;
monthdays[4]=31;
monthdays[5]=30;
monthdays[6]=31;
monthdays[7]=31;
monthdays[8]=30;
monthdays[9]=31;
monthdays[10]=30;
monthdays[11]=31;
todayDate=new Date();
thisday=todayDate.getDay();
thismonth=todayDate.getMonth();
thisdate=todayDate.getDate();
thisyear=todayDate.getYear();
thisyear = thisyear % 100;
thisyear = ((thisyear < 50) ? (2000 + thisyear) : (1900 + thisyear));
if (((thisyear % 4 == 0)
&& !(thisyear % 100 == 0))
||(thisyear % 400 == 0)) monthdays[1]++;
startspaces=thisdate;
while (startspaces > 7) startspaces-=7;
startspaces = thisday - startspaces + 1;
if (startspaces < 0) startspaces+=7;
document.write("<table border=2 bgcolor=white ");
document.write("bordercolor=black><font color=black>");
document.write("<tr><td colspan=7><center><strong>"
+ monthnames[thismonth] + " " + thisyear
+ "</strong></center></font></td></tr>");
document.write("<tr>");
document.write("<td align=center>Вс</td>");
document.write("<td align=center>Пн</td>");
document.write("<td align=center>Вт</td>");
document.write("<td align=center>Ср</td>");
document.write("<td align=center>Чт</td>");
document.write("<td align=center>Пт</td>");
document.write("<td align=center>Сб</td>");
document.write("</tr>");
document.write("<tr>");
for (s=0;s<startspaces;s++) {
document.write("<td> </td>");
}
count=1;
while (count <= monthdays[thismonth]) {
for (b = startspaces;b<7;b++) {
linktrue=false;
document.write("<td>");
for (c=0;c<linkdays.length;c++) {
if (linkdays[c] != null) {
if ((linkdays[c][0]==thismonth + 1) && (linkdays[c][1]==count)) {
document.write("<a href=\"" + linkdays[c][2] + "\">");
linktrue=true;
}
}
}
if (count==thisdate) {
document.write("<font color='FF0000'><strong>");
}
if (count <= monthdays[thismonth]) {
document.write(count);
}
else {
document.write(" ");
}
if (count==thisdate) {
document.write("</strong></font>");
}
if (linktrue)
document.write("</a>");
document.write("</td>");
count++;
}
document.write("</tr>");
document.write("<tr>");
startspaces=0;
}
document.write("</table></p>");
</SCRIPT></body></html>

Спустя 27 минут, 50 секунд (12.05.2009 - 16:06) ahmed написал(а):
smile.gif интересная мысля...вот только для определения весокосного года я думаю лучше юзать
PHP
function check_year(god)
    {
     
god=god-2008;
     if (
god<0) {god=god*(-1)}
     if (
god%4==0) {return true;}
     else {return 
false;}  
    }

чем
HTML
thisyear = thisyear % 100;
thisyear = ((thisyear < 50) ? (2000 + thisyear) : (1900 + thisyear));
if (((thisyear % 4 == 0)
&& !(thisyear % 100 == 0))
||(thisyear % 400 == 0)) monthdays[1]++;


хотя кто знает...честно говоря не совсем понял смысл строки
thisyear = thisyear % 100;
thisyear = ((thisyear < 50) ? (2000 + thisyear) : (1900 + thisyear));
а в остальном интересненькие мысли...может на досуге объединю оба варианта и сделаю полностью на Javascript...(happy.gif)

Спустя 10 минут, 28 секунд (12.05.2009 - 16:16) FatCat написал(а):
Цитата (ahmed @ 12.05.2009 - 16:06)
хотя кто знает...честно говоря не совсем понял смысл строки
thisyear = thisyear % 100;

Это смена веков.
Календарь писался еще в прошлом веке. laugh.gif
Год делится на 100. Если остаток от деления больше 50 - календарь считает как ХХ век; если меньше 50 - XXI век.
В 2050-м году этот календарь будет показывать 1950-й. biggrin.gif laugh.gif

Спустя 2 минуты, 13 секунд (12.05.2009 - 16:18) Ahmed написал(а):
^)))...не зря мне показались эти строк странноватыми...

Спустя 4 минуты, 22 секунды (12.05.2009 - 16:23) Ahmed написал(а):
Эти кусочек тоже вызвал недоумение...smile.gif кажется он лишний:)))
я его убрал, а скрипт все равно работает...
PHP
for (c=0;c<linkdays.length;c++) {
if (
linkdays[c] != null) {
if ((
linkdays[c][0]==thismonth 1) && (linkdays[c][1]==count)) {
document.write("<a href=\"" linkdays[c][2] + "\">");
linktrue=true;
}
}
}

Спустя 8 минут, 45 секунд (12.05.2009 - 16:31) Ahmed написал(а):
Прикольно будет если доработать скрипт календарика, так чтобы его можно было встроить в форму...я это уже где то видел...smile.gif там рядом с полем какой нить даты стоит значок календаря, щелкаешь по нему появляется календарь...затем кликаешь на какой нить дате и она появляется в поле:)...

Спустя 3 часа, 4 минуты, 19 секунд (12.05.2009 - 19:36) FatCat написал(а):
Цитата (Ahmed @ 12.05.2009 - 16:23)
Эти кусочек тоже вызвал недоумение...smile.gif кажется он лишний:)))

Скрипт не моей разработки, я его лишь перетырил давным-давно, когда еще только учился писать скрипты.
Насколько я понимаю код, в полном скрипте календарь был кликабельный, и был массив линков к каждому дню.
Кто-то повырезал функционал линков, но остались "хвосты".
Вот еще один "хвост":
Цитата
function addlink(month, day, href)
Третий передаваемый параметр, как я понимаю, и передавал линки на дни календаря из массива линков; в коде это еще один "хвост", пустой массив:
Цитата
linkdays = new Array();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.