Reputation: 5846
I have an array structured like this:
Array ( [0] => 24-12-2013 [1] => 25-12-2013 [2] => 26-12-2014 [3] => 27-12-2013 [4])
I would like to check if any of the dates in the array are within a given date range.
The date range is structured like this:
$start = (date("d-m-Y", strtotime('25-12-2013')));
$end = (date("d-m-Y", strtotime('26'12'2013')));
I would like to know which dates in the array are within the date range.
Upvotes: 1
Views: 9513
Reputation: 1153
// PHP >= 5.3:
$dates_in_range = array_filter($array, function($date) {
global $start;
global $end;
return (strtotime($date) >= strtotime($start) and strtotime($date) <= strtotime($end));
});
Upvotes: 0
Reputation: 219814
<?php
$start = DateTime::createFromFormat('d-m-Y', '25-12-2013');
$end = DateTime::createFromFormat('d-m-Y', '26-12-2013');
$dates = array('24-12-2013','25-12-2013','26-12-2014','27-12-2013');
$matches = array();
foreach ($dates as $date) {
$date2 = DateTime::createFromFormat('d-m-Y', $date);
if ($date2 >= $start && $date2 =< $end) {
$matches[] = $date;
}
}
print_r($matches);
Upvotes: 2
Reputation: 212412
$dates = array ('24-12-2013', '25-12-2013', '26-12-2014', '27-12-2013');
$start = strtotime('25-12-2013');
$end = strtotime('26-12-2013');
$inDateRange = count(
array_filter(
$dates,
function($value) use($start, $end) {
$value = strtotime($value);
return ($value >= $start && $value <= $end);
}
)
);
Upvotes: 3
Reputation: 28911
Couple things:
DateTime
objects to compare dates, not stringsThis code will do what you want:
$dates = array("2013-12-24","2013-12-25","2014-12-24","2013-12-27");
$start = strtotime('2013-12-25');
$end = strtotime('2013-12-26');
foreach($dates AS $date) {
$timestamp = strtotime($date);
if($timestamp >= $start && $timestamp <= $end) {
echo "The date $date is within our date range\n";
} else {
echo "The date $date is NOT within our date range\n";
}
}
See it in action:
Upvotes: 9
Reputation: 1544
Loop over the array turning each date into unix time (seconds since Jan 1, 1970), and do simple math to see if the number of seconds is between the range. Like so:
$start = strtotime('25-12-2013');
$end = strtotime('26'12'2013');
foreach($date in $dates) {
$unix_time = strtotime($date);
if($unix_time > $start && $unix_time < $end)
//in range
}
Upvotes: 0
Reputation: 115
$_between = array();
$start = date('Ymd', strtotime($start));
$end = date('Ymd', strtotime($end));
foreach ($dates as $date)
{
$date = date('Ymd',strtotime($date));
if ($date > $start && $date < $end) {
array_push($_between,$date);
continue;
}
}
echo '<pre>';
var_dump($_between);
echo '</pre>';
Upvotes: 0