sharp.mac Posted August 12, 2010 Share Posted August 12, 2010 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 More sharing options...
sharp.mac Posted August 12, 2010 Author Share Posted August 12, 2010 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? Link to comment https://forums.phpfreaks.com/topic/210530-time-of-day-dependencies/#findComment-1098526 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.