Event Calendar

Display Calendar on php

I’ve searched around for calendars that is on PHP but all I searched are date time picker. But what I only want is a simple calendar that shows me the date, without picking them. I just need the calendar to display simply like how a normal calendar works in our Operating System, thanks. Is there any way?

I think the best way is do your own, you will never find exactly what you need and making a calendar is really not so difficult.

3 Answers 3

 array(null, null,'
' . $today . '
')); $pn = array('«' => date('n', $time) - 1, '»' => date('n', $time) + 1); echo generate_calendar(date('Y', $time), date('n', $time), $days, 1, null, 0); // PHP Calendar (version 2 . 3), written by Keith Devens // http://keithdevens . com/software/php_calendar // see example at http://keithdevens . com/weblog // License: http://keithdevens . com/software/license function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()) < $first_of_month = gmmktime(0, 0, 0, $month, 1, $year); // remember that mktime will automatically correct if invalid dates are entered // for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998 // this provides a built in "rounding" feature to generate_calendar() $day_names = array(); //generate all the day names according to the current locale for ($n = 0, $t = (3 + $first_day) * 86400; $n < 7; $n++, $t+=86400) //January 4, 1970 was a Sunday $day_names[$n] = ucfirst(gmstrftime('%A', $t)); //%A means full textual day name list($month, $year, $month_name, $weekday) = explode(',', gmstrftime('%m, %Y, %B, %w', $first_of_month)); $weekday = ($weekday + 7 - $first_day) % 7; //adjust for $first_day $title = htmlentities(ucfirst($month_name)) . $year; //note that some locales don't capitalize month and day names //Begin calendar . Uses a real . See http://diveintomark . org/archives/2002/07/03 @list($p, $pl) = each($pn); @list($n, $nl) = each($pn); //previous and next links, if applicable if($p) $p = '' . ($pl ? '' . $p . '' : $p) . ' '; if($n) $n = ' ' . ($nl ? '' . $n . '' : $n) . ''; $calendar = "
' . $p . ($month_href ? '' . $title . '' : $title) . $n . "\n"; if($day_name_length) < //if the day names should be shown ($day_name_length >0) //if day_name_length is >3, the full name of the day will be printed foreach($day_names as $d) $calendar .= '' . htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d) . ''; $calendar .= "\n"; > if($weekday > 0) < for ($i = 0; $i < $weekday; $i++) < $calendar .= ' '; //initial 'empty' days > > for($day = 1, $days_in_month = gmdate('t',$first_of_month); $day \n"; > if(isset($days[$day]) and is_array($days[$day])) < @list($link, $classes, $content) = $days[$day]; if(is_null($content)) $content = $day; $calendar .= '' : '>') . ($link ? '' . $content . '' : $content) . ''; > else $calendar .= "$day"; > if($weekday != 7) $calendar .= ' '; //remaining "empty" days return $calendar . "\n\n
\n"; > ?>

It’s a pretty basic mini calendar. No fancy functions.

I have written just one such with PHP5 + ajax(if you are need to use it):

I also was looking for a simple solution, a PHP class that rendered me a monthly calendar where I could add easily events.

You have to still create a view/template in html, but you can find a CSS and HTML version there that you can use.

And it has custom events also in PHP

$event = $calendar->event() ->condition('timestamp', strtotime('January 2, 2010')) ->title('Hello All') ->output('My Custom Event') ->add_class('custom-event-class'); 

Источник

Event Calendar with PHP

Event Calendar with PHP

In this article, I have developed an event calendar class that will populate all the days in a month based on the specified date, along with the events that we can add to the calendar.

While PHP doesn’t include a built-in calendar API per se (without including additional extensions), it does, however, give you a broad range of date and time methods that we can use to manipulate. In addition, we can use these methods to populate the pages showing the days, weeks, and months of a particular year.

Why should I use the calendar class?

It’s entirely up to you and your requirements. I have decided to take it upon myself to write my own class as I work on many projects that require an event-based calendar system. I’ve searched countless times for a minimal, dependency-free, and modern library. But couldn’t find one that I could seamlessly integrate with my projects. Therefore, I created a PHP class that can easily be integrated with any project, whether the project’s size is small or large.

Source

Create a new file Calendar.php and add the following code:

active_year = $date != null ? date('Y', strtotime($date)) : date('Y'); $this->active_month = $date != null ? date('m', strtotime($date)) : date('m'); $this->active_day = $date != null ? date('d', strtotime($date)) : date('d'); > public function add_event($txt, $date, $days = 1, $color = '') < $color = $color ? ' ' . $color : $color; $this->events[] = [$txt, $date, $days, $color]; > public function __toString() < $num_days = date('t', strtotime($this->active_day . '-' . $this->active_month . '-' . $this->active_year)); $num_days_last_month = date('j', strtotime('last day of previous month', strtotime($this->active_day . '-' . $this->active_month . '-' . $this->active_year))); $days = [0 => 'Sun', 1 => 'Mon', 2 => 'Tue', 3 => 'Wed', 4 => 'Thu', 5 => 'Fri', 6 => 'Sat']; $first_day_of_week = array_search(date('D', strtotime($this->active_year . '-' . $this->active_month . '-1')), $days); $html = '
active_year . '-' . $this->active_month . '-' . $this->active_day)); $html .= '
'; $html .= '
'; $html .= '
'; > for ($i = $first_day_of_week; $i > 0; $i--) < $html .= '
' . ($num_days_last_month-$i+1) . '
'; > for ($i = 1; $i active_day) < $selected = ' selected'; >$html .= '
'; $html .= '' . $i . ''; foreach ($this->events as $event) < for ($d = 0; $d active_year . '-' . $this->active_month . '-' . $i . ' -' . $d . ' day')) == date('y-m-d', strtotime($event[1]))) < $html .= '
'; $html .= $event[0]; $html .= '
'; > > > $html .= '
'; > for ($i = 1; $i ' . $i . '
'; > $html .= '
'; $html .= '
'; return $html; > > ?>

Add the following code to your stylesheet (CSS) or create a new file calendar.css:

.calendar < display: flex; flex-flow: column; >.calendar .header .month-year < font-size: 20px; font-weight: bold; color: #636e73; padding: 20px 0; >.calendar .days < display: flex; flex-flow: wrap; >.calendar .days .day_name < width: calc(100% / 7); border-right: 1px solid #2c7aca; padding: 20px; text-transform: uppercase; font-size: 12px; font-weight: bold; color: #818589; color: #fff; background-color: #448cd6; >.calendar .days .day_name:nth-child(7) < border: none; >.calendar .days .day_num < display: flex; flex-flow: column; width: calc(100% / 7); border-right: 1px solid #e6e9ea; border-bottom: 1px solid #e6e9ea; padding: 15px; font-weight: bold; color: #7c878d; cursor: pointer; min-height: 100px; >.calendar .days .day_num span < display: inline-flex; width: 30px; font-size: 14px; >.calendar .days .day_num .event < margin-top: 10px; font-weight: 500; font-size: 14px; padding: 3px 6px; border-radius: 4px; background-color: #f7c30d; color: #fff; word-wrap: break-word; >.calendar .days .day_num .event.green < background-color: #51ce57; >.calendar .days .day_num .event.blue < background-color: #518fce; >.calendar .days .day_num .event.red < background-color: #ce5151; >.calendar .days .day_num:nth-child(7n+1) < border-left: 1px solid #e6e9ea; >.calendar .days .day_num:hover < background-color: #fdfdfd; >.calendar .days .day_num.ignore < background-color: #fdfdfd; color: #ced2d4; cursor: inherit; >.calendar .days .day_num.selected

How To Use

Include the class in your project and create a new instance.

include 'Calendar.php'; $calendar = new Calendar();

We can specify a date while creating a new instance:

include 'Calendar.php'; $calendar = new Calendar('2023-05-12');

Add new events to the calendar:

$calendar->add_event('Holiday', '2023-05-14');

We can specify the number of days the event should last by binding an additional value to the add_event method:

$calendar->add_event('Holiday', '2023-05-14', 7); // Event will last for 7 days

We can also change the color:

$calendar->add_event('Holiday', '2023-05-14', 7, 'red');

Only red, blue, and green will work (the default is orange). You can add more colors to the CSS file.

We can populate the calendar in HTML format with the following code:

Example Code

Create a new file example.php and add the following code:

add_event('Birthday', '2023-05-03', 1, 'green'); $calendar->add_event('Doctors', '2023-05-04', 1, 'red'); $calendar->add_event('Holiday', '2023-05-16', 7); ?>        

The stylesheet (style.css) for our example page:

* < box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, "segoe ui", roboto, oxygen, ubuntu, cantarell, "fira sans", "droid sans", "helvetica neue", Arial, sans-serif; font-size: 16px; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; >body < background-color: #FFFFFF; margin: 0; >.navtop < background-color: #3b4656; height: 60px; width: 100%; border: 0; >.navtop div < display: flex; margin: 0 auto; width: 800px; height: 100%; >.navtop div h1, .navtop div a < display: inline-flex; align-items: center; >.navtop div h1 < flex: 1; font-size: 24px; padding: 0; margin: 0; color: #ebedee; font-weight: normal; >.navtop div a < padding: 0 20px; text-decoration: none; color: #c4c8cc; font-weight: bold; >.navtop div a i < padding: 2px 8px 0 0; >.navtop div a:hover < color: #ebedee; >.content < width: 800px; margin: 0 auto; >.content h2

And now, if we navigate to our example page, it will appear similar to the following:

Event Calendar PHP

If you don’t see any events populated on the calendar, make sure the dates are correct, and your server timezone is set correctly. You can change the timezone with the below code.

date_default_timezone_set('America/Los_Angeles');

The full list of supported timezones are available here.

Conclusion

While the calendar class I’ve created is not a complete solution, it will most definitely help you integrate the class into any project seamlessly and extend the base code.

Drop a comment below and let me know if you encounter any issues with the class. Don’t forget to follow us on social media and share our articles, as this will help our website grow, and we can provide more quality content.

Released under the MIT License. If you’re going to redistribute the code, please include my name and link to this article. Thanks!

If you would like to support us, consider purchasing the advanced event calendar system below as it will greatly help us create more tutorials and keep our website up and running. The advanced package includes improved code and more features.

Источник

Календарь событий PHP + Javascript

Недавно возникла потребность создать календарь событий, где каждая дата в календаре будет подсвечена ссылкой, если какое-нибудь событие присутствует для каждого числа. Если мне разрешат оставить ссылку, здесь демонстрация работы календаря.

Задача вроде бы не сложная, но среди немногочисленных решений в интернете я не нашел подходящего по следующим причинам: слишком сложный и непонятный код, медленные запросы к БД (это особенно ощущается, если в базе много записей), использование библиотеки jQuery, к которой я отношусь не очень хорошо.

Итак, к плюсам моего календаря можно отнесли следующее:

  1. Весь код помещается в 200 строчек и состоит из одного файла, который подключается через include
  2. Скрипт состоит из чистого php + javascript без использования библиотеки jQuery
  3. Используются простые и оптимизированные запросы к БД
  4. Подгрузка следующего (предыдущего) месяца происходит через AJAX

Логика

Календарь генерируется средствами php для текущего месяца. Для каждого дня проверяем нет ли записей в БД, если есть, — формируем ссылку на событие. Дописываем javascript код для перелистывание месяцев, который обращается к скрипту через ajax. Задача усложняется тем, что события растянуты во времени, то есть, начинаются в один день, а заканчиваются через несколько дней или даже месяцев. На всем временном промежутке существование события нужно его подсветить ссылкой для каждого дня.

Генерируем календарь на PHP

)-(7)-(4)$/"; if (preg_match($pattern, $_REQUEST['date'])) < $date = $_REQUEST['date']; >else < die('Неправильный параметр'); >> else < $date=date("Y-m-d"); >$sd = explode("-", $date); $year = $sd[0]; $month = $sd[1]; $day = $sd[2]; // Вычисляем число дней в текущем месяце $dayofmonth = date('t', mktime(0, 0, 0, $month, 1, $year)); //Готовим запрос к БД $todate = "$year-$month-$dayofmonth"; $fromdate = "$year-$month-01"; $query ; $res_db = $db->sql($query); 

Таким образом, мы выбрали все записи, которые есть в текущем месяце.

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

$d = array();$k=array(); for($i = 1; $i $i=0; while ($a = mysqli_fetch_row($res_db)) < //for($i = 1; $i= $a[0] && $cd > > 
// Счётчик для дней месяца $day_count = 1; // 1. Первая неделя $num = 0; for($i = 0; $i < 7; $i++) < // Вычисляем номер дня недели для числа $dayofweek = date('w', mktime(0, 0, 0, $month, $day_count, $year)); // Приводим к числа к формату 1 - понедельник, . 6 - суббота $dayofweek = $dayofweek - 1; if($dayofweek == -1) $dayofweek = 6; if($dayofweek == $i) < // Если дни недели совпадают, // заполняем массив $week // числами месяца $week[$num][$i] = $day_count; $day_count++; >else < $week[$num][$i] = ""; >> // 2. Последующие недели месяца while(true) < $num++; for($i = 0; $i < 7; $i++) < $week[$num][$i] = $day_count; $day_count++; // Если достигли конца месяца - выходим // из цикла if($day_count >$dayofmonth) break; > // Если достигли конца месяца - выходим // из цикла if($day_count > $dayofmonth) break; > // 3. Выводим содержимое массива $week // в виде календаря // Выводим таблицу echo ''; //заголовок $rusdays = array('ПН','ВТ','СР','ЧТ','ПТ','СБ','ВС'); $rusmonth = array('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'); echo '   '.$rusmonth[$month-1].', '.$year.' > '; echo ''; foreach ($rusdays as $rusday)< echo ''.$rusday.''; > echo ''; echo ''; //тело календаря for($i = 0; $i < count($week); $i++) < echo ""; for($j = 0; $j < 7; $j++) < if(!empty($week[$i][$j])) < // Если имеем дело с выбраной датой подсвечиваем ee if($week[$i][$j]==$day) < echo ''; > else < echo ''; > // Если запись в базе за текущую дату есть, делаем ссылку if($d[$week[$i][$j]]) < echo ''.$week[$i][$j].''; > else < echo $week[$i][$j]; >echo ''; > else echo " "; > echo ""; > ?> 

Javascript код для перематывание месяцев

Он немного упрощен для наглядности (отсутствуют эффекты скольжения):

 var mon = parseInt(""); var year = parseInt(); function monthf(pn)< if (pn == 'next')< mon++; >else if (pn == 'prev')< mon--; >else < alert('Неправильный параметр'); return false; >if (mon > 12) < year ++; mon = 1; >if (mon < 1)< year --; mon = 12; >if ((mon < 10) && (mon >= 1)) < mon = '0'+mon; >var nextDate = year+'-'+mon+'-00'; var ajaxaddr php">"; ?> 

Выводы

Таким образом получился простой и легко встраиваемый календарь событий, который быстро работает и легко настраивается, работающий на чистом PHP+javascript без дополнительных библиотек.

Литература

Источник

Читайте также:  Javascript input typing event
Оцените статью