Jump to content

Time of day dependencies


sharp.mac

Recommended Posts

I am trying to solve a booking glitch that has been plaguing me now for a few months.

 

I have a function that returns me weather or not it's "store hours or not" true/false

 

//<!--discover time -->  is it office hours?
function determineTime() {
	$hour = date("H");

	 if (($hour < '09' || $hour >= '21')) {
		return true;
	} else {
		return false;
	} 
} 
//<!--/discover time -->

 

 

Now a few rules and dependencies I must follow.

 

1- (During Office Hours) No one can book for anything less then 2 hours before a scheduled departure

2- (During Non-Hours) No one can book a trip that is before Opening the next Morning (ex: 5am departures are ruled out. Must depart 9am or later)

 

If its not today and it is a date in the future then no restrictions apply.

 

 

Currently I have these nested into a very ugly set of if statements that house 4 queries allowing me to sort by time & city.

 

Would anyone know of a way of doing this other then my crazy run around logic?

Link to comment
https://forums.phpfreaks.com/topic/210530-time-of-day-dependencies/
Share on other sites

here is the ugly....

 


		$today = date("m/d/Y");
		$nowTime = date("His");
		$futureTime = date("His", strtotime("$nowTime + 2 hours"));
		$tomorrow = date("m/d/Y", strtotime("+ 1 day"));

			if($dep_date <= $today) {
				if(determineTime()){
				//we are closed

				$departures = $db->query("
								SELECT
									  cities.city AS dep_city, 
									  cities_1.city AS arr_city,
									  trips.id_doorspecs AS dep_dsid,
									  trips_1.id_doorspecs AS arr_dsid,
									  trips.tripnumber AS dep_tripnumber, 
									  trips_1.tripnumber AS arr_tripnumber,
									  trips.arr_dep AS dep_arr_dep, 
									  trips_1.arr_dep AS arr_arr_dep,
									  min(trips.time) AS dep_time,
									  max(trips_1.time) AS arr_time,
									  baseprices.base_price AS dep_base_price,
									  addcosts.addcosts AS dep_addcosts
								  
								FROM
									  trips
									  INNER JOIN locations ON trips.id_locations = locations.id_locations
									  INNER JOIN cities ON trips.id_cities = cities.id_cities
									  LEFT OUTER JOIN addcosts ON trips.id_addcosts = addcosts.id_addcosts
									  INNER JOIN baseprices ON trips.id_baseprices = baseprices.id_baseprices, trips trips_1
									  INNER JOIN locations locations_1 ON trips_1.id_locations = locations_1.id_locations
									  INNER JOIN cities cities_1 ON trips_1.id_cities = cities_1.id_cities


								WHERE
								 	  trips.arr_dep = 'dep' 
								  AND cities.city LIKE '$departure'
								  AND trips_1.arr_dep = 'arr' 
								  AND cities_1.city LIKE '$arrival' 
								  AND trips.tripnumber = trips_1.tripnumber 
								  AND trips.dir != 0
								  AND trips.time > '$futureTime'
								  AND trips.time >= '090000'
								  AND trips.time <= trips_1.time

								GROUP BY
									trips.tripnumber

								ORDER BY
									trips.time
								"); //run query

					}else{ 
					//we are open
					$departures = $db->query("
								SELECT
									  cities.city AS dep_city, 
									  cities_1.city AS arr_city,
									  trips.id_doorspecs AS dep_dsid,
									  trips_1.id_doorspecs AS arr_dsid,
									  trips.tripnumber AS dep_tripnumber, 
									  trips_1.tripnumber AS arr_tripnumber,
									  trips.arr_dep AS dep_arr_dep, 
									  trips_1.arr_dep AS arr_arr_dep,
									  min(trips.time) AS dep_time,
									  max(trips_1.time) AS arr_time,
									  baseprices.base_price AS dep_base_price,
									  addcosts.addcosts AS dep_addcosts
								  
								FROM
									  trips
									  INNER JOIN locations ON trips.id_locations = locations.id_locations
									  INNER JOIN cities ON trips.id_cities = cities.id_cities
									  LEFT OUTER JOIN addcosts ON trips.id_addcosts = addcosts.id_addcosts
									  INNER JOIN baseprices ON trips.id_baseprices = baseprices.id_baseprices, trips trips_1
									  INNER JOIN locations locations_1 ON trips_1.id_locations = locations_1.id_locations
									  INNER JOIN cities cities_1 ON trips_1.id_cities = cities_1.id_cities
								  
								WHERE
								 	  trips.arr_dep = 'dep' 
								  AND cities.city LIKE '$departure'
								  AND trips_1.arr_dep = 'arr' 
								  AND cities_1.city LIKE '$arrival' 
								  AND trips.tripnumber = trips_1.tripnumber 
								  AND trips.dir != 0
								  AND trips.time > '$futureTime'

								  AND trips.time <= trips_1.time

								GROUP BY
									trips.tripnumber

								ORDER BY
									trips.time
								"); //run query	



					};
			}else{

			$timeer = determineTime();

				if($dep_date <= $tomorrow && $timeer == true) {
				$departures = $db->query("
								SELECT
									  cities.city AS dep_city, 
									  cities_1.city AS arr_city,
									  trips.id_doorspecs AS dep_dsid,
									  trips_1.id_doorspecs AS arr_dsid,
									  trips.tripnumber AS dep_tripnumber, 
									  trips_1.tripnumber AS arr_tripnumber,
									  trips.arr_dep AS dep_arr_dep, 
									  trips_1.arr_dep AS arr_arr_dep,
									  min(trips.time) AS dep_time,
									  max(trips_1.time) AS arr_time,
									  baseprices.base_price AS dep_base_price,
									  addcosts.addcosts AS dep_addcosts
								  
								FROM
									  trips
									  INNER JOIN locations ON trips.id_locations = locations.id_locations
									  INNER JOIN cities ON trips.id_cities = cities.id_cities
									  LEFT OUTER JOIN addcosts ON trips.id_addcosts = addcosts.id_addcosts
									  INNER JOIN baseprices ON trips.id_baseprices = baseprices.id_baseprices, trips trips_1
									  INNER JOIN locations locations_1 ON trips_1.id_locations = locations_1.id_locations
									  INNER JOIN cities cities_1 ON trips_1.id_cities = cities_1.id_cities
								  
								WHERE
								 	  trips.arr_dep = 'dep' 
								  AND cities.city LIKE '$departure'
								  AND trips_1.arr_dep = 'arr' 
								  AND cities_1.city LIKE '$arrival' 
								  AND trips.tripnumber = trips_1.tripnumber 
								  AND trips.dir != 0
								  AND trips.time >= '090000'
								  AND trips.time <= trips_1.time

								GROUP BY
									trips.tripnumber

								ORDER BY
									trips.time
								"); //run query

				}else{

				$departures = $db->query("
								SELECT
									  cities.city AS dep_city, 
									  cities_1.city AS arr_city,
									  trips.id_doorspecs AS dep_dsid,
									  trips_1.id_doorspecs AS arr_dsid,
									  trips.tripnumber AS dep_tripnumber, 
									  trips_1.tripnumber AS arr_tripnumber,
									  trips.arr_dep AS dep_arr_dep, 
									  trips_1.arr_dep AS arr_arr_dep,
									  min(trips.time) AS dep_time,
									  max(trips_1.time) AS arr_time,
									  baseprices.base_price AS dep_base_price,
									  addcosts.addcosts AS dep_addcosts
								  
								FROM
									  trips
									  INNER JOIN locations ON trips.id_locations = locations.id_locations
									  INNER JOIN cities ON trips.id_cities = cities.id_cities
									  LEFT OUTER JOIN addcosts ON trips.id_addcosts = addcosts.id_addcosts
									  INNER JOIN baseprices ON trips.id_baseprices = baseprices.id_baseprices, trips trips_1
									  INNER JOIN locations locations_1 ON trips_1.id_locations = locations_1.id_locations
									  INNER JOIN cities cities_1 ON trips_1.id_cities = cities_1.id_cities
								  
								WHERE
								 	  trips.arr_dep = 'dep' 
								  AND cities.city LIKE '$departure'
								  AND trips_1.arr_dep = 'arr' 
								  AND cities_1.city LIKE '$arrival' 
								  AND trips.tripnumber = trips_1.tripnumber 
								  AND trips.dir != 0
								  AND trips.time <= trips_1.time

								GROUP BY
									trips.tripnumber

								ORDER BY
									trips.time
								"); //run query
				}
			};
		?>
		<div>
		<?php
		//catch blank returns
		$rowNum = $db->numRows();


 

yea... i must have been smoking crack or something, there has to be something less of a fuss...  what about a case switch?

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.