Jump to content

Calendar Date Array


karenn1

Recommended Posts

Hey everyone!

 

I found a script on the net to display a calendar on my page and it works fine. It has a piece of code where I can specify which dates must be highlighted in a month. It looks like this:

 

$calendar->highlighted_dates = array(
'2011-12-03',
'2011-12-14',
'2011-12-25'
);

 

I've got a list of dates in a table in my database that I need to get into this array. It's formatted the same as in the example. Can someone please help?

 

 

Thanks,

 

Karen

Link to comment
https://forums.phpfreaks.com/topic/253065-calendar-date-array/
Share on other sites

So, i think your looking for something along these lines:

<?php
$sql = "SELECT `dates` from table";
$result = mysql_query($sql);

$dates = array();
while($row = mysql_fetch_assoc($result)){

array_push($dates, $row['dates']);

}
$calendar->highlighted_dates = $dates;

 

hope it helps

Link to comment
https://forums.phpfreaks.com/topic/253065-calendar-date-array/#findComment-1297462
Share on other sites

AWESOME!! Thanks @gristoi, that works perfectly. I need more help though.  :-[

 

In the same table that stores the dates, I have a user ID attached to each date. I would like to change the highlight colour for each user ID.

 

Here's the code. Would this be possible?

 

<?php
/**
* Calendar Generation Class
*
* This class provides a simple reuasable means to produce month calendars in valid html
*
* @version 2.8
* @author Jim Mayes <[email protected]>
* @link http://style-vs-substance.com
* @copyright Copyright (c) 2008, Jim Mayes
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt GPL v2.0
*/

class Calendar{
var $date;
var $year;
var $month;
var $day;

var $week_start_on = FALSE;
var $week_start = 7;// sunday

var $link_days = TRUE;
var $link_to;
var $formatted_link_to;

var $mark_today = TRUE;
var $today_date_class = 'today';

var $mark_selected = TRUE;
var $selected_date_class = 'selected';

var $mark_passed = TRUE;
var $passed_date_class = 'passed';

var $highlighted_dates;
var $default_highlighted_class = 'highlighted';


/* CONSTRUCTOR */
function Calendar($date = NULL, $year = NULL, $month = NULL){
	$self = htmlspecialchars($_SERVER['PHP_SELF']);
	$this->link_to = $self;

	if( is_null($year) || is_null($month) ){
		if( !is_null($date) ){
			//-------- strtotime the submitted date to ensure correct format
			$this->date = date("Y-m-d", strtotime($date));
		} else {
			//-------------------------- no date submitted, use today's date
			$this->date = date("Y-m-d");
		}
		$this->set_date_parts_from_date($this->date);
	} else {
		$this->year		= $year;
		$this->month	= str_pad($month, 2, '0', STR_PAD_LEFT);
	}	
}

function set_date_parts_from_date($date){
	$this->year		= date("Y", strtotime($date));
	$this->month	= date("m", strtotime($date));
	$this->day		= date("d", strtotime($date));
}

function day_of_week($date){
	$day_of_week = date("N", $date);
	if( !is_numeric($day_of_week) ){
		$day_of_week = date("w", $date);
		if( $day_of_week == 0 ){
			$day_of_week = 7;
		}
	}
	return $day_of_week;
}

function output_calendar($year = NULL, $month = NULL, $calendar_class = 'calendar'){

	if( $this->week_start_on !== FALSE ){
		echo "The property week_start_on is replaced due to a bug present in version before 2.6. of this class! Use the property week_start instead!";
		exit;
	}

	//--------------------- override class methods if values passed directly
	$year = ( is_null($year) )? $this->year : $year;
	$month = ( is_null($month) )? $this->month : str_pad($month, 2, '0', STR_PAD_LEFT);

	//------------------------------------------- create first date of month
	$month_start_date = strtotime($year . "-" . $month . "-01");
	//------------------------- first day of month falls on what day of week
	$first_day_falls_on = $this->day_of_week($month_start_date);
	//----------------------------------------- find number of days in month
	$days_in_month = date("t", $month_start_date);
	//-------------------------------------------- create last date of month
	$month_end_date = strtotime($year . "-" . $month . "-" . $days_in_month);
	//----------------------- calc offset to find number of cells to prepend
	$start_week_offset = $first_day_falls_on - $this->week_start;
	$prepend = ( $start_week_offset < 0 )? 7 - abs($start_week_offset) : $first_day_falls_on - $this->week_start;
	//-------------------------- last day of month falls on what day of week
	$last_day_falls_on = $this->day_of_week($month_end_date);

	//------------------------------------------------- start table, caption
	$output  = "<table class=\"" . $calendar_class . "\">\n";
	$output .= "<caption>" . ucfirst(strftime("%B %Y", $month_start_date)) . "</caption>\n";

	$col = '';
	$th = '';
	for( $i=1,$j=$this->week_start,$t=(3+$this->week_start)*86400; $i<=7; $i++,$j++,$t+=86400 ){
		$localized_day_name = gmstrftime('%A',$t);
		$col .= "<col class=\"" . strtolower($localized_day_name) ."\" />\n";
		$th .= "\t<th title=\"" . ucfirst($localized_day_name) ."\">" . strtoupper($localized_day_name{0}) ."</th>\n";
		$j = ( $j == 7 )? 0 : $j;
	}

	//------------------------------------------------------- markup columns
	$output .= $col;

	//----------------------------------------------------------- table head
	$output .= "<thead>\n";
	$output .= "<tr>\n";

	$output .= $th;

	$output .= "</tr>\n";
	$output .= "</thead>\n";

	//---------------------------------------------------------- start tbody
	$output .= "<tbody>\n";
	$output .= "<tr>\n";

	//---------------------------------------------- initialize week counter
	$weeks = 1;

	//--------------------------------------------------- pad start of month

	//------------------------------------ adjust for week start on saturday
	for($i=1;$i<=$prepend;$i++){
		$output .= "\t<td class=\"pad\"> </td>\n";
	}

	//--------------------------------------------------- loop days of month
	for($day=1,$cell=$prepend+1; $day<=$days_in_month; $day++,$cell++){

		/*
		if this is first cell and not also the first day, end previous row
		*/
		if( $cell == 1 && $day != 1 ){
			$output .= "<tr>\n";
		}

		//-------------- zero pad day and create date string for comparisons
		$day = str_pad($day, 2, '0', STR_PAD_LEFT);
		$day_date = $year . "-" . $month . "-" . $day;

		//-------------------------- compare day and add classes for matches
		if( $this->mark_today == TRUE && $day_date == date("Y-m-d") ){
			$classes[] = $this->today_date_class;
		}

		if( $this->mark_selected == TRUE && $day_date == $this->date ){
			$classes[] = $this->selected_date_class;
		}

		if( $this->mark_passed == TRUE && $day_date < date("Y-m-d") ){
			$classes[] = $this->passed_date_class;
		}

		if( is_array($this->highlighted_dates) ){
			if( in_array($day_date, $this->highlighted_dates) ){
				$classes[] = $this->default_highlighted_class;
			}
		}

		//----------------- loop matching class conditions, format as string
		if( isset($classes) ){
			$day_class = ' class="';
			foreach( $classes AS $value ){
				$day_class .= $value . " ";
			}
			$day_class = substr($day_class, 0, -1) . '"';
		} else {
			$day_class = '';
		}

		//---------------------------------- start table cell, apply classes
		// detect windows os and substitute for unsupported day of month modifer
		$title_format = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')? "%A, %B %#d, %Y": "%A, %B %e, %Y";

		$output .= "\t<td" . $day_class . " title=\"" . ucwords(strftime($title_format, strtotime($day_date))) . "\">";

		//----------------------------------------- unset to keep loop clean
		unset($day_class, $classes);

		//-------------------------------------- conditional, start link tag 
		switch( $this->link_days ){
			case 0 :
				$output .= $day;
			break;

			case 1 :
				if( empty($this->formatted_link_to) ){
					$output .= "<a href=\"" . $this->link_to . "?date=" . $day_date . "\">" . $day . "</a>";
				} else {
					$output .= "<a href=\"" . strftime($this->formatted_link_to, strtotime($day_date)) . "\">" . $day . "</a>";
				}
			break;

			case 2 :
				if( is_array($this->highlighted_dates) ){
					if( in_array($day_date, $this->highlighted_dates) ){
						if( empty($this->formatted_link_to) ){
							$output .= "<a href=\"" . $this->link_to . "?date=" . $day_date . "\">";
						} else {
							$output .= "<a href=\"" . strftime($this->formatted_link_to, strtotime($day_date)) . "\">";
						}
					}
				}

				$output .= $day;

				if( is_array($this->highlighted_dates) ){
					if( in_array($day_date, $this->highlighted_dates) ){
						if( empty($this->formatted_link_to) ){
							$output .= "</a>";
						} else {
							$output .= "</a>";
						}
					}
				}
			break;
		}

		//------------------------------------------------- close table cell
		$output .= "</td>\n";

		//------- if this is the last cell, end the row and reset cell count
		if( $cell == 7 ){
			$output .= "</tr>\n";
			$cell = 0;
		}

	}

	//----------------------------------------------------- pad end of month
	if( $cell > 1 ){
		for($i=$cell;$i<=7;$i++){
			$output .= "\t<td class=\"pad\"> </td>\n";
		}
		$output .= "</tr>\n";
	}

	//--------------------------------------------- close last row and table
	$output .= "</tbody>\n";
	$output .= "</table>\n";

	//--------------------------------------------------------------- return
	return $output;

}

}
?>

Link to comment
https://forums.phpfreaks.com/topic/253065-calendar-date-array/#findComment-1297485
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.