PHP:按日期范围过滤数组

时间:2012-05-19 19:29:58

标签: php arrays

我有一个对象数组。每个对象都包含一个日期值。

根据特定日期范围过滤数组的最佳效果,其中范围指定为startDate& ENDDATE?


更新

感谢您的回复,我最后使用了这段代码:

 foreach ($myArray as $key => &$value)
 {
      $d = DateTime::createFromFormat(self::DATE_FORMAT, $value["orderDate"]); 
      if ($d->getTimestamp() < $startDateTime->getTimestamp() || $d->getTimestamp() > $endDateTime->getTimestamp())
      {
           unset($myArray[$key]);
      }
 }

3 个答案:

答案 0 :(得分:3)

这是基本的想法;你必须根据你的特定对象类型和日期类型进行调整。

foreach ($myarray as $item)
    if ($item->dateitem >= $startDate  &&  
        $item->dateitem <= $endDate)
            $newarray[] = $item;

答案 1 :(得分:3)

假设您的对象包含日期的字符串表示,我们将使用strtotime()将其转换为数字时间戳。

过滤掉不在给定范围内的所有内容(保持与开始/结束值匹配的值):

 $rangeStart = strtotime('-1 year');
 $rangeEnd = strtotime('yesterday');

 array_filter( $array, function($var) use ($rangeStart, $rangeEnd) {
    $utime = strtotime($var->date);
    return $utime <= $rangeEnd && $utime >= $rangeStart;
 });

按日期对数组进行排序:

 function cmp($a, $b) {
    $aTime = strtotime($a->date);
    $bTime = strtotime($b->date);

    if( $aTime === $bTime ) { return 0; }
    else { return $aTime < $bTime? -1 : 1; }
 }

 usort( $array, 'cmp' );

答案 2 :(得分:2)

function inRange($thingy) {
  return $thingy->theDate >= $startDate && $thingy->theDate < $endDate;
}

$filtered = array_filter($unfiltered, "inRange");