Psst! Create a DigitalOcean account and get $200 in free credit for cloud-based hosting and services.
-
Mike
Permalink to comment#
How would i alter this to highlight the current day?
Reply
-
Jason
Permalink to comment#
Add this two vars to the top of script:
$today_date = date("d");$today_date = ltrim($today_date, '0');
Then change the date loop to the following:
while ($currentDay <= $numberDays) { // Seventh column (Saturday) reached. Start a new row. if ($dayOfWeek == 7) { $dayOfWeek = 0; $calendar .= "</tr><tr>"; } $currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT); $date = "$year-$month-$currentDayRel"; if($currentDayRel == $today_date ){ $calendar .= "<td class='day' id='today_date ' rel='$date'><b>$currentDay</b></td>"; } else { $calendar .= "<td class='day' rel='$date'>$currentDay</td>"; } // Increment counters $currentDay++; $dayOfWeek++; }
Use the id=’today_date ‘ in your css to change the days appearance….
Hope this helps…
– Jason
-
-
Brian Dady
Permalink to comment#
These functions may also be used. The first creates a calendar a specific month/year, and the second creates a full year calendar from specified month/year.
//For Specific Month and Year
$month = "3"; //Number of month (1-12)
$year = "2010"; //Four digets
echo build_calendar($month,$year,$dateArray);//For all Months in Specific Year
$year = "2010";
$i = 1;
$month=1; //Numeric Value
while($i <'s= 12){
echo build_calendar($month,$year,$dateArray);
$month=$month+1;
$i++;}Reply
-
Brian Dady
Permalink to comment#
The second code should actually read:
//For all Months in Specific Year
$year = "2010";
$i = 1;
$month=1; //Numeric Value
while($i <'s= 12){
echo build_calendar($month,$year,$dateArray);
$month=$month+1;
$i++;} -
Mark
Permalink to comment#
This is pretty neat. Thank you.
I still cannot get the complete year to work however.
Any ideas? -
seuser
Permalink to comment#
while($i <= 12){
instead of while($i <'s= 12){
-
-
Zachary
Permalink to comment#
Could you post on how to have events (localhost database) displayed in the calendar and also have calendar controls such as picking of the month, year and next & previous month. Thanks
Zachary ([emailprotected])
Reply
-
Jason
Permalink to comment#
Just query your database by the date of the event… explode the string so that you only get the day in a one digit format. Then in the date print loop (see my above code), check to see if the date queried equals the $currentDay. If it does, print the event(s) data. It will re-query every time with the new date.
Example
$result = mysql_query("SELECT event_title FROM events WHERE event_date = '".$currentDay."'") or die(mysql_error());$row = mysql_fetch_array($result);$num_results = mysql_num_rows($result); if ($num_results > 0){ echo $row['event_title']; } else{ }
Put the code while ($currentDay <= $numberDays) { } loop…
while ($currentDay <= $numberDays) { // Seventh column (Saturday) reached. Start a new row. if ($dayOfWeek == 7) { $dayOfWeek = 0; $calendar .= "</tr><tr>"; } $currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT); $date = "$year-$month-$currentDayRel"; if($currentDayRel == $today_date ){ $calendar .= "<td class='day' id='today_date ' rel='$date'><b>$currentDay</b>";$result = mysql_query("SELECT event_title FROM events WHERE event_date = '".$currentDay."'") or die(mysql_error());$row = mysql_fetch_array($result);$num_results = mysql_num_rows($result); if ($num_results > 0){$i=0;while($i <= $num_results) { $calendar.= $row['event_title']; }} else{ } $calendar.= "</td>"; } else { $calendar .= "<td class='day' rel='$date'>$currentDay</td>"; } // Increment counters $currentDay++; $dayOfWeek++; }
Double check my request query loop, but that should work…
-
-
anup
Permalink to comment#
It’s really a good script and idea to implement. Nice one! Dev. can use / customize with his needs. ;)
Reply
-
Pritesh Patel
Permalink to comment#
Questions, what is the third argument $dateArray for? Seems to me there’s no reference in the function for this argument.
Great tool. I wish there was a way to change the month but this would require ajax or using an iframe.
Reply
-
Kevin
Permalink to comment#
Change:
See AlsoHow To Make A Monthly Calendar With Real Data | CSS-Tricks17+ Beautiful CSS calendars [Examples] - Alvaro Trigo's BlogHTML Calendar Styling with CSS: 38 Examples50+ Best CSS Calendars - For Your Website (Free)$calendar .= "<td class='day' rel='$date'>$currentDay</td>";
To something like this (displays the date information next to the date):
$calendar .= "<td class='day' rel='$date'>$currentDay"; if(isset($dateArray[mktime(0, 0, 0, $month, $currentDay, $year)])){ $calendar.=$dateArray[mktime(0, 0, 0, $month, $currentDay, $year)]; } $calendar.="</td>";
Or this (links to a page for specific dates):
$calendar .= "<td class='day' rel='$date'>"; if(isset($dateArray[mktime(0, 0, 0, $month, $currentDay, $year)])){ $calendar.="<a href=\"$dateArray[mktime(0, 0, 0, $month, $currentDay, $year)]\">$currentDay</a>"; }else{ $calendar.=$currentDay; } $calendar.="</td>";
and build the array elsewhere. See the page I linked to my name for output (I still need to clean up some formatting).
-
-
Navee
Permalink to comment#
Likewise…what IS the 3rd argument $dateArray for? I’m getting undefined variable errors as a result. Removed both references of it from the code and the Calendar appears fine without errors.
Reply
-
Irene
Permalink to comment#
Hi
I am learning to put a calendar on a web blog and came across this thread. Could you please tell me what is the full script etc for the calendar please…..Thanks in advance
IreneReply
-
Dylan
Permalink to comment#
My small change to have the week start on Monday:
$dayOfWeek = $dateComponents['wday'] - 1; // fix for monday startif ($dayOfWeek < 0) { $dayOfWeek = 6;}
Also just change the
$daysOfWeek
array.Hope it works :)
Reply
-
Dan
Permalink to comment#
Brilliant! Just what I was looking for :D
-
Artur
Permalink to comment#
Short version:
$dayOfWeek = ($dateComponents[‘wday’] + 6) % 7;
-
-
:: kevin :: UK ::
Permalink to comment#
Awesome, love it.
Thank you for a great bit of code, and to the guys that left feedback with optional changes that really do improve the calendar’s functionalityReply
-
Dery
Permalink to comment#
hi ,i’m a student in senior high school (newbie) , i implemented this in fuelphp but there are some bug ,
<?php
class Controller_Calendar extends Controller_Timetable{
public function before(){
parent::before();
}public function build_calendar($month,$year) {
// Create array containing abbreviations of days of week.
$daysOfWeek = array('S','M','T','W','T','F','S');// What is the first day of the month in question?
$firstDayOfMonth = mktime(0,0,0,$month,1,$year);// How many days does this month contain?
$numberDays = date('t',$firstDayOfMonth);// Retrieve some information about the first day of the
// month in question.
$dateComponents = getdate($firstDayOfMonth);// What is the name of the month in question?
$monthName = $dateComponents['month'];// What is the index value (0-6) of the first day of the
// month in question.
$dayOfWeek = $dateComponents['wday'];// Create the table tag opener and day headers
$calendar = "";
$calendar .= "$monthName $year";
$calendar .= "";// Create the calendar headers
foreach($daysOfWeek as $day) {
$calendar .= "$day";
}// Create the rest of the calendar
// Initiate the day counter, starting with the 1st.
$currentDay = 1;
$calendar .= "";
// The variable $dayOfWeek is used to
// ensure that the calendar
// display consists of exactly 7 columns.if ($dayOfWeek > 0) {
$calendar .= "";
}$month = str_pad($month, 2, "0", STR_PAD_LEFT);
while ($currentDay <= $numberDays) {
// Seventh column (Saturday) reached. Start a new row.
if ($dayOfWeek == 7) {
$dayOfWeek = 0;
$calendar .= "";}
$currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT);
$date = "$year-$month-$currentDayRel";
$calendar .= "$currentDay";
// Increment counters
$currentDay++;
$dayOfWeek++;}
// Complete the row of the last week in month, if necessary
if ($dayOfWeek != 7) {
$remainingDays = 7 - $dayOfWeek;
$calendar .= "";}
$calendar .= "";
$calendar .= "";
return $calendar;
}
$dateComponents = getdate();
$i = 1;
$month=1; //Numeric Value
while($iErrorException [ Parsing Error ]: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in $dateComponents = getdate();
can all of you explain this problem with me ?
Reply
-
etob
Permalink to comment#
Very good script. Concise and short. Thanks
My small changes to highlight specified dates:
Before calling main function:
$dateArray = array('FEB04','MAR20');
Inside main function:
$monthNameShort = strtoupper(substr($monthName,0,3));
Inside
while ($currentDay <= $numberDays)'
loop:$date = "$monthNameShort$currentDayRel";if (in_array($date,$dateArray)) $calendar .= "<td class='day' title='$date'><b>$currentDay</td>"; //bold else $calendar .= "<td class='day' title='$date' style='color:grey;'>$currentDay</td>"; //grey
Reply
-
Mehul Boricha
Permalink to comment#
Thanks a lot.
Reply
-
Green
Permalink to comment#
How can I create a calendar with some dates from previous month and next month. For example: http://st.rfclipart.com/image/big/c4-e1-9f/february-2013-calendar-month-Download-Royalty-free-Vector-File-EPS-13946.jpg
Thanks advanced!Reply
-
Perch
Permalink to comment#
Bump. I’d like to know this too.
:0)
Perch
-
-
Richie
Permalink to comment#
Have no idea if You will be interest in, but I add few lines of code for listing monthBYmonth throu the calendar. I had problem with $dateComponents. I have no idea how to work with so I remove it and use (for me more simple) DATE and MKTIME.
If You will use it, put it onto bottom of code:
$next = $_GET["next"];$prev = $_GET["prev"];$today = $_GET["today"];$nextlist = $_GET["nextlist"];$prevlist = $_GET["prevlist"];if ($next == "next") {$month=date('n', $nextlist);$monthName=date('F', $nextlist);$year=date('Y', $nextlist);}elseif ($prev == "prev") {$month=date('n', $prevlist);$monthName=date('F', $prevlist);$year=date('Y', $prevlist);}elseif ($today == "today") {$month=date('n');$monthName=date('F');$year=date('Y');}else {$month=date('n');$monthName=date('F');$year=date('Y');}$curlist = mktime(0, 0, 0, $month, 1, $year);$nextlist = mktime(0, 0, 0, $month+1, 1, $year);$prevlist = mktime(0, 0, 0, $month-1, 1, $year);echo "<a id=\"prev\" href=\"new.php?prev=prev&prevlist=$prevlist\"><<</a> <a id=\"today\" href=\"new.php?today=today\"> today </a> <a id=\"next\" href=\"new.php?next=next&nextlist=$nextlist\">>></a>"; echo build_calendar($month,$year,$dateArray);
Reply
-
liviu
Permalink to comment#
function renderMonth($displayM, $displayY){ $daysOfWeek = array ( 'Mon', 'Tue', 'Wen', 'Thu', 'Fri', 'Sat', 'Sun' ); $dateUtil = new DateTime ( $displayY . "/" . $displayM . "/01" ); $year = $dateUtil->format ( "Y" ); $week = $dateUtil->format ( "W" ); $week_start = new DateTime (); $week_start->setISODate ( $year, $week ); $nextDay = clone $week_start; $i = 1; $weekdays = 7; // how many days do we display per row $currday = 1; // current week day $daysno = 35; // number of display dates $calendar = '<table class="event-calendar">'; $calendar .= "<thead>"; $calendar .= "<tr>"; foreach ( $daysOfWeek as $day ) { $calendar .= "<th>$day</th>"; } $calendar .= "</tr>"; $calendar .= "</thead>"; $calendar .= "<tbody>"; while ( $i < $daysno ) { if ($i == 1) { $calendar .= '<tr>'; $calendar .= '<td>' . $nextDay->format ( 'd M' ) . '</td>'; } $currday ++; if ($currday > $weekdays) { $calendar .= '</tr>'; $calendar .= '<tr>'; $currday = 1; } $nextDay->add ( new DateInterval ( 'P1D' ) ); $calendar .= '<td>' . $nextDay->format ( 'd M' ) . '</td>'; $i ++; if ($i == $daysno) { $calendar .= '</tr>'; } } $calendar .= "</tbody>"; $calendar .= "</table>"; return $calendar;}echo renderMonth("10", "2015");
this will fill the empty spaces with previuos or forward days of month. kind of google calendar and stuff
Reply
-
Bogdan
Permalink to comment#
Hello there! Great script. Only a small question if it is possible.
How can i make $monthName an array. Something like:
$monthName = array(‘January’,’February’,’March’,’April’,’May’,’June’,’July’,’August’,’September’,’October’,’November’,’December’);
Thx in advance!Reply
-
Patrick
Permalink to comment#
Hello. Im looking for same advice. I need to make months name in my language, and this will really help me.
-
Maniac
Permalink to comment#
$monate = array(
1=>”Januar”,
2=>”Februar”,
3=>”März”,
4=>”April”,
5=>”Mai”,
6=>”Juni”,
7=>”Juli”,
8=>”August”,
9=>”September”,
10=>”Oktober”,
11=>”November”,
12=>”Dezember”
);// What is the name of the month in question? $monthName = $monate[$dateComponents['mon']];
have fun ;-)
-
-
Carlos
Permalink to comment#
Hey i have a problem and i can solved anyone now how to?
Notice: Undefined variable: today_date in D:\Server\htdocs\Ejercicios\Pruebas\Prueba2.php on line 94Reply
-
Saroj
Permalink to comment#
Great Script Thanks. But I am trying to make custom Calendar instead of the Gregorian Calendar.
I have to create calendar from array such as this.
date73 = {2073,32,32,31,32,31,30,30,30,29,29,30,31}
date74 = {2074,31,31,31,32,31,31,30,29,30,29,30,30}where the first date73[0] is the year and the rest of them are the days in the months. Please help.
Reply
-
philippe
Permalink to comment#
Hi, this is great thanks !
How could it be possible to have the month as a parameter, in order to change the calendar month ?
Maybe sending it in the url ?Thanks a lot
Reply
-
manh
Permalink to comment#
hi, can anybody add week column to calendar?
Reply
-
Matthias Pettersson
Permalink to comment#
BUMP! I’d love to know this too =]
-
-
Anit
Permalink to comment#
What is $dateArray doing ?!
Reply
-
john castaldi
Permalink to comment#
is there a way to make it so that the current date is always on the second week? so last week is the top, then the current week, then the next 2?
Reply
-
Geoff Graham
Permalink to comment#
You’d need to retrieve dates starting earlier than the current month. I haven’t played with this snippet, but perhaps setting
$currentDay
to a negative number for how many days you want to go back is the first step.
-
-
YupYup
Permalink to comment#
Lovely :) Any way to show the full year but with 1 to 31 across the top and then the months down the side? Trying the build an attendance card where a dot will be placed in the day the student attends.
Hope this makes sense :)
Reply
-
Arnd
Permalink to comment#
Thanks. But what do I need to change if the week starts on Monday?
Reply
-
Smid98
Permalink to comment#
Just change the days of week array in to the correct order.
And change$dayOfWeek = $dateComponents[‘wday’];
to
$dayOfWeek = ($dateComponents[‘wday’] + 6) % 7;
-
-
franki
Permalink to comment#
It seems to me an excellent code,
I have managed to add a url for each day by adding the following code,….. when clicking on each day it shows a page.$calendar .= “<a href=’http://url.com.php?date=$date>$currentDay“;
Do you have any idea how can I display the url inside an iframe on the same page?
Reply