php check multiple dates in array are within a dat

2019-06-11 20:47发布

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.

标签: php date range
6条回答
乱世女痞
2楼-- · 2019-06-11 21:31

Couple things:

  • Use timestamps or DateTime objects to compare dates, not strings
  • Use date format YYYY-MM-DD to avoid potential ambiguity about your date format (d/m/y or m/d/y)

This 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:

http://3v4l.org/GWJI2

查看更多
The star\"
3楼-- · 2019-06-11 21:32

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
 }
查看更多
混吃等死
4楼-- · 2019-06-11 21:36
$_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>';
查看更多
女痞
5楼-- · 2019-06-11 21:39
<?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);

See it in action

查看更多
再贱就再见
6楼-- · 2019-06-11 21:48
$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); 
        }
    )
);
查看更多
家丑人穷心不美
7楼-- · 2019-06-11 21:48
// 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));
});
查看更多
登录 后发表回答