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
"; 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 .= '
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:
And now, if we navigate to our example page, it will appear similar to the following:
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.
Недавно возникла потребность создать календарь событий, где каждая дата в календаре будет подсвечена ссылкой, если какое-нибудь событие присутствует для каждого числа. Если мне разрешат оставить ссылку, здесь демонстрация работы календаря.
Задача вроде бы не сложная, но среди немногочисленных решений в интернете я не нашел подходящего по следующим причинам: слишком сложный и непонятный код, медленные запросы к БД (это особенно ощущается, если в базе много записей), использование библиотеки jQuery, к которой я отношусь не очень хорошо.
Итак, к плюсам моего календаря можно отнесли следующее:
Весь код помещается в 200 строчек и состоит из одного файла, который подключается через include
Скрипт состоит из чистого php + javascript без использования библиотеки jQuery
Используются простые и оптимизированные запросы к БД
Подгрузка следующего (предыдущего) месяца происходит через AJAX
Логика
Календарь генерируется средствами php для текущего месяца. Для каждого дня проверяем нет ли записей в БД, если есть, — формируем ссылку на событие. Дописываем javascript код для перелистывание месяцев, который обращается к скрипту через ajax. Задача усложняется тем, что события растянуты во времени, то есть, начинаются в один день, а заканчиваются через несколько дней или даже месяцев. На всем временном промежутке существование события нужно его подсветить ссылкой для каждого дня.
Таким образом, мы выбрали все записи, которые есть в текущем месяце.
Дальше самое интересное: заполняем обходочный массив. Для того, чтобы не крутить лишний раз все заново, если находится соответствие, элемент массива удаляется и следующий цикл имеет меньше итераций.
"; 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 без дополнительных библиотек.