Using one already chosen date: Test example
$dates[] = array("date" => "2016-02-18 02:00:00", "duration" => "600"); // 10 mins
$dates[] = array("date" => "2016-02-18 02:05:00", "duration" => "300"); // 5 mins
$dates[] = array("date" => "2016-02-18 02:10:00", "duration" => "600");
$dates[] = array("date" => "2016-02-18 02:25:00", "duration" => "300");
$dates[] = array("date" => "2016-02-18 02:30:00", "duration" => "600");
$alreadyChosenDates[] = array("date" => "2016-02-18 02:10:30", "duration" => "600"); // 10 mins
//$alreadyChosenDates[] = array("date" => "2016-02-18 02:05:00", "duration" => "300"); // 5 mins
function returnClosestTime($alreadyChosenDates, $dates){
// Set an array called $closestTime that has the time difference and the key
$closestTime = [null, null];
// Check each element in array
foreach($dates as $key => $date){
foreach($alreadyChosenDates as $chosenDates){
// Calculate difference between already chosen dates array and the dates array
$diff = (strtotime($chosenDates["date"]) + $chosenDates["duration"]) - strtotime($date["date"]);
if($diff < 0) $diff = $diff * -1;
// If $closestTime is empty, populate it
if($closestTime[0] === null) $closestTime = [$diff, $key];
// If $closestTime isn't empty and the current date's time difference
// is smaller, populate $closestTime with the time difference and key
else if($diff < $closestTime[0]) $closestTime = [$diff, $key];
}
}
return $dates[$closestTime[1]];
}
echo "<pre>";
print_r(returnClosestTime($alreadyChosenDates, $dates));
echo "</pre>";
Output:
Array
(
[date] => 2016-02-18 02:25:00
[duration] => 300
)
In the above example i'm using only one already chosen date but i'm looking for some help on how i'd use two already chosen dates?
so instead of just this:
$alreadyChosenDates[] = array("date" => "2016-02-18 02:10:30", "duration" => "600"); // 10 mins
It would be this
$alreadyChosenDates[] = array("date" => "2016-02-18 02:10:30", "duration" => "600"); // 10 mins
$alreadyChosenDates[] = array("date" => "2016-02-18 02:05:00", "duration" => "300"); // 5 mins
and the closest date/time would be the closest to either 2016-02-18 02:10:30
or 2016-02-18 02:05:00
but it would also be good to see if the closest time would be in the middle of 2016-02-18 02:10:30
and 2016-02-18 02:05:00
.
How would I go about doing this?