Jump to content

Compare overlapping dates times for booking purposes with Google calendar events


Brick1881

Recommended Posts

Hi,

 

I want to check entered dates and times that a user selects against my "book-off" calendar which is a Google Calendar.

The dates&times from Google is in the form: 2011-04-29T23:00:00.000+02:00

 

The dates in my booking software (ABPro) is in the form: 2011-04-29

Times in form: 23:00:00

 

All I want the function to return is a number other than 0 if any of the dates/times in Google feed overlap the requested date/time entered in the booking.

 

So I add a function and get the feed from Google:

	function checkOverlapG($calendarID, $startdate, $starttime, $enddate, $endtime){
	// Create an instance of the Calendar service using an unauthenticated
	//HTTP client
	$service = new Zend_Gdata_Calendar();
	//Retrieving events in order of start time
	$query = $service->newEventQuery();
	$query->setUser('calendarID'); 
	// Set to $query->setVisibility('private-magicCookieValue') if using MagicCookie auth
	$query->setVisibility('public');
	$query->setProjection('full');
	$query->setOrderby('starttime');
	$query->setSortOrder('ascending');                  //start with first event in future
	//seFutureevents must be commented out when using start and end times.
	$query->setFutureevents('true');
	$query->setSingleEvents('true');	
	$query->setMaxResults('200');      //Guess this could be anything, but can possibly make things slower. Default 25 events
	//$query->setStartMin('2006-12-01');
	//$query->setStartMax('2006-12-16);  // setStartMax is exclusive, will not include last date. Must add +1 day.					 
	// Retrieve the event list from the calendar server
	try {
		$eventFeed = $service->getCalendarEventFeed($query);
               }  catch (Zend_Gdata_App_Exception $e) {
		echo "Error: " . $e->getMessage();
		return null;
	}

 

Now I want to compare the dates and times and see if any of them collide or overlap. I want to add a counter, and if any of the events overlap, I want the counter to add one number.

1. the first thing I do is check if the event feed include. any events.

2. then I add a counter

3. then I run a foreach to retrieve events one at a time

4. then I change the date and time format from Google Event to match the date and time format form the booking.

5. If fullday event from google, no time information is added, so I add this

6. COMPARE DATES AND TIMES and if overlapping events --> n++;

 

I've not gotten this code to work. Probably I'm doing something wrong, and I'm sorry but I'm completely new to this.

Getting the Google Calendar data is working fine, and so is changing the format of the dates/times to be same format as request data.

After that (and before, I don't know).

 

$gCount = count($eventFeed);
		$n = 0;
		if (gCount>0){
			foreach($eventFeed as $event){
				foreach ($event->when as $when) {
					//Getting rid of extra 00's and time zone info for now
					$startGevent = $when->startTime;
					$startGevent = str_replace('.000+02:00',"",$startGevent);
					$endGevent = $when->endTime;
					$endGevent = str_replace('.000+02:00',"",$endGevent);

					//Splitting date and time into two variables
					list($startDateEvent, $startTimeEvent) = split('T',$startGevent);
					list($endDateEvent, $endTimeEvent) = split('T',$endGevent);

					//Fill in the blanks
					if($startTimeEvent!=0) {}
					else{$startTimeEvent = "00:00:00";}
					if($endTimeEvent!=0) {}
					else{$endTimeEvent = "00:00:00";}

					//Compare dates
					if($startdate == $endDateEvent){
						if($starttime > $endTimeEvent OR $endtime < $startTimeEvent){}
						else {
						n++;
						}
					} if($enddate == $startDateEvent){
						if($endtime < $startTimeEvent OR $starttime > $endTimeEvent){}
						else {
						n++;
						}
					} 

				}
			}
		return $n;	
		}

 

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • 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.