Сейчас: 07:47:30   26-го апреля 2024 г.
UsefulScript.ruСкриптыДата и времяПростой календарь для сайта
173
513

Простой календарь для сайта

Предлагаем Вашему вниманию JavaScript код, который позволит Вам реализовать на своем сайте календарь. Данный календарь будет способен рассчитать, сколько дней в месяце, и какими днями недели будут числа в указанных месяцах и годах.


Предлагаемый нами календарь содержит множество настроек, которые позволяют настраивать его отображение.


Чуть ниже Вы можете наблюдать пример работы предлагаемого Вам скрипта календаря:



Для получения у себя точно такого же календаря, как и в примере, показанном чуть выше, добавьте в шапку сайта CSS код:

HTML код:
<style type="text/css">
    .
calendar margin0 autofont-weightbold; }
    .
calendar td width30pxheight16px; }
    .
calendar tr background-colorgray; }
    .
day_off background-colorredcolorwhite; }
    
#today_cell, #cal_cell { cursor: pointer; }
    #today_cell:hover, #cal_cell:hover { color: green; }
</style>

Далее скопируйте JavaScript код, который позволяет создать календарь на сайте:

JavaScript код:
<script type="text/javascript">
var 
dDate = new Date();
var 
cur_month dDate.getMonth();
var 
day_of_month dDate.getDate();
var 
cur_year dDate.getFullYear();
var 
bgcolortbgcolorntbgcolor;

function 
DaysInMonth(iMonthiYear) {
    var 
prev_date = new Date(iYeariMonth0);
    return 
prev_date.getDate();
}

function 
build_cal(iYeariMonth) {
var 
the_month = new Array();
    
the_month[0] = new Array("Пн""Вт""Ср""Чт""Пт""Сб""Вс");
    
the_month[1] = new Array(7);
    
the_month[2] = new Array(7);
    
the_month[3] = new Array(7);
    
the_month[4] = new Array(7);
    
the_month[5] = new Array(7);
    
the_month[6] = new Array(7);
var 
dCalDate = new Date(iYeariMonth-11);
var 
day_first dCalDate.getDay();
var 
iDaysInMonth DaysInMonth(iMonthiYear);
var 
iVarDate 1;
var 
idw;
if (
day_first==0day_first 6;
else 
day_first day_first 1;

for (
d=day_first7d++) {
 
the_month[1][d] = iVarDate;
 
iVarDate++;
}
for (
w=27w++) {
 for (
d=07d++) {
  if (
iVarDate <= iDaysInMonth) {
   
the_month[w][d] = iVarDate;
   
iVarDate++;
  }
 }
}
return 
the_month;
}

function 
draw_cal(iYeariMonthinwe_colitbg_colintbg_col) {
tbgcolor itbg_col;
ntbgcolor intbg_col;

var 
my_month=build_cal(iYeariMonth);
document.write("<table class='calendar'>");
document.write("<tr align='center' style='color:" inwe_col "'>");
document.write("<td>" my_month[0][0] + "</td>");
document.write("<td>" my_month[0][1] + "</td>");
document.write("<td>" my_month[0][2] + "</td>");
document.write("<td>" my_month[0][3] + "</td>");
document.write("<td>" my_month[0][4] + "</td>");
document.write("<td class='day_off'>" my_month[0][5] + "</td>");
document.write("<td class='day_off'>" my_month[0][6] + "</td></tr>");

for (
w=17w++) {
 
document.write("<tr align='center' valign='center'>")
 for (
d=07d++) {
  if (
my_month[w][d]==day_of_month
    
document.write("<td id=today_cell bgcolor='" tbgcolor "'>");
  else 
document.write("<td id=cal_cell bgcolor='" ntbgcolor "'>");

  if (!
isNaN(my_month[w][d])) document.write("<font id=cal_text>" my_month[w][d]);
  else 
document.write("<font id=cal_text>&nbsp;");
 
document.write("</td>")
 }
document.write("</tr>");
}
document.write("</table>")
}

function 
update(iYeariMonth) {
my_month build_cal(iYeariMonth);
if (((
iMonth-1)==cur_month) && (iYear==cur_year)) today_cell.bgColor tbgcolor;
else 
today_cell.bgColor ntbgcolor;

for (
w=17w++) {
 for (
d=07d++) {
  if (!
isNaN(my_month[w][d])) cal_text[((7*w)+d)-7].innerText my_month[w][d];
  else 
cal_text[((7*w)+d)-7].innerText " ";
 }
}
}
</script>

Обращаем Ваше внимание на то, что текст скрипта приведен с переносами длинных строк, которые после копирования необходимо вновь написать в одну строку!


В том месте Вашей странички, где Вы планируете показывать данный календарь, добавьте следующие два кода:

HTML код:
<form name="c_fоrm" action="#" style="text-align: center;">

<
select name="sel_month" 
    
onchange='update(c_fоrm.sel_year.value, c_fоrm.sel_month.value)'>
 <
option 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>

<
select name="sel_year"
    
onchange='update(c_fоrm.sel_year.value, c_fоrm.sel_month.value)'>
 <
option value="2013">2013</option>
 <
option value="2014">2014</option>
 <
option value="2015">2015</option>
 <
option value="2016">2016</option>
 <
option value="2017">2017</option>
 </
select>
</
form>
JavaScript код:
<script type="text/javascript">
var 
cur_date=new Date();
draw_cal(cur_date.getFullYear(), cur_date.getMonth()+1"white""red""silver");
c_fоrm.sel_month.options[cur_date.getMonth()].selected=true;
for (
i=0c_fоrm.sel_year.lengthi++)
 if (
c_fоrm.sel_year.options[i].value==cur_date.getFullYear())
    
c_fоrm.sel_year.options[i].selected=true;
</script>

Еще раз обращаем Ваше внимание на то, что текст скрипта в некоторых местах приведен с переносами длинных строк, которые после копирования к себе на сайт необходимо вновь написать в одну строку!


И пусть большой размер приведенного кода Вас не пугает, он нисколько не будет тормозить работу Вашего сайта.

Дата создания: 23:06:05 11.11.2011 г.
Дата обновления: 21:44:23 27.04.2015 г.
Посещений: 61504 раз(а).

Комментарии посетителей (22 шт.):
Игорь
0
# 831
(17:03:35  09.05.2013 г.)

Спасибо! А можно сделать, чтобы в форме выводились не январь 2011, а текущий месяц и год?
Ответить

Administrator
4
# 832
(18:55:32  09.05.2013 г.)

Поправил. Надо было просто небольшую часть кода перенести из первого кода в конец второго.
Ответить

Максим
0
# 1070
(11:00:34  30.08.2013 г.)

Взял ваш календарик, очень понравился, только есть одна проблемка. Как можно сделать, чтоб по выбранной дате на календаре ниже выводились ближайшие события из файла?
Ответить

Administrator
0
# 1072
(20:23:11  30.08.2013 г.)

JavaScript браузерный язык и не работает с файлами, поэтому можем предложить Вам только использовать Ajax.
Ответить

Рафиль
0
# 1137
(16:02:15  16.09.2013 г.)

Добрый день! Нужен календарь для сайта кафе, чтобы я сам мог закрашивать будущие даты, на которые уже забронированы банкеты. Как такой из вашего календаря сделать.
Ответить

Administrator
0
# 1138
(20:45:46  16.09.2013 г.)

Это будет довольно сложно (и не очень функционально). Вам лучше сделать подобный календарь на PHP, т.к. наш сделан на JavaScript, а у JavaScript и PHP немного разные задачи и возможности.
Ответить

Игорь
0
# 1142
(23:58:12  18.09.2013 г.)

А можно ли каждое число сделать ссылкой на определенные страницы?
Ответить

Андрей
0
# 1147
(13:04:52  20.09.2013 г.)

Добрый день. Я новичок и не пойму, какие строки должны быть длинными, не моли бы Вы пронумеровать их, не могу никак настроить.
Ответить

Administrator
0
# 1149
(18:49:42  20.09.2013 г.)

В одну строку следует объединять строчки, которые заканчиваются на знак " + ", либо " ' " или " = ".
А еще проще откройте исходный код данной странички и скопируйте JavaScript код оттуда.
Ответить

влад
1
# 1188
(15:12:10  08.10.2013 г.)

А можно вынести код джавы? Чтобы не прописывать его на каждой странице.
Ответить

Administrator
-1
# 1190
(19:51:10  08.10.2013 г.)

Конечно можно (даже рекомендуется). Вынесите его в отдельный js файл, либо в js файл, который уже подгружается на всех страничках.
Ответить

Альфия
2
# 1303
(15:29:27  21.11.2013 г.)

У Вас эта форма не передает сегодняшнюю дату, а если дату поменять, обратно на сегодняшнюю не становится.
Ответить

Алина
0
# 2433
(11:36:34  27.04.2015 г.)

Добрый день! Спасибо Вам за очень полезные советы! Подскажите, пожалуйста, можно ли в данном календаре сделать так, чтобы текущее число выделялось не красным, а каким-нибудь другим цветом (например, зеленым)?
Ответить

Administrator
0
# 2435
(20:02:38  27.04.2015 г.)

Конечно можно. В последнем коде внизу есть функция draw_cal(). В ней и задаются цвета для оформления.
За цвет текущего числа отвечает третье с конца значение.
P.S. Тему чуть-чуть обновил.
Ответить

Игорь
3
# 2669
(01:04:07  30.08.2015 г.)

Подскажите, пожалуйста, а как распечатать выбранную дату: день месяц число_месяца, например, через alert()?
Ответить

Рустам
0
# 2769
(22:47:59  15.10.2015 г.)

Добрый вечер! Скажите, пожалуйста, а можно добавить стрелки, чтобы быстро менять месяц? И еще, можно ли сделать кнопку "на сегодня".
Ответить

Administrator
0
# 2773
(12:32:32  16.10.2015 г.)

Кнопка возврата к текущему месяцу делается просто:
<input type="button" onclick='update(new Date().getFullYear(),new Date().getMonth()+1)' value="Вернуться">
А вот со стрелками сложнее, т.к. надо где-то хранить текущие значения месяца и года и придется менять функции.
Ответить

Эльза
0
# 2811
(07:38:51  11.11.2015 г.)

Здравствуйте! Написано "скопируйте данный JavaScript код на свою страничку", но я так и не поняла куда скопировать, точнее в какое место. Объясните, пожалуйста.
Ответить

Administrator
0
# 2812
(20:13:01  11.11.2015 г.)

Данный код можно разместить непосредственно перед HTML кодом из данной темы или во внешнем подключаемом js файле. Посмотрите исходный код данной странички, и Вы увидите, что у нас JS и HTML код календаря расположены друг за другом. Если у Вас сайт на платформе какой-либо CMS, то тут лучше обратиться на форум пользователей данной CMS.
Ответить

Андрей
1
# 3055
(22:59:14  25.02.2016 г.)

В случае изменения значений в раскрывающихся списках содержимое календаря не обновляется (ни количество дней, ни их распределение по дням недели).
Ответить

Игорь
1
# 3222
(18:03:00  20.05.2016 г.)

Здравствуйте. Подскажите, пожалуйста, какую команду и где добавить, чтобы можно было закрашивать прошедшие дни щелчком мыши? И чтобы эти данные сохранялись. Заранее благодарю.
Ответить

Вика
0
# 4245
(23:36:03  17.02.2018 г.)

Добрый вечер! Почему-то не работает скрипт в Firefox, во всех браузерах нормально, а в этом - никакой реакции.
Ответить

Закрыть
Ваше имя:
660 + 7 =
Добавить комментарий:
Ваше имя:
660 + 7 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 4

Какую CMS для сайта Вы предпочитаете?