PHP:按日期范围筛选数组

PHP:按日期范围筛选数组,php,arrays,Php,Arrays,我有一个对象数组。每个对象都包含一个日期值 根据指定为startDate&endDate的特定日期范围筛选数组的最佳方法是什么 更新: 感谢您的回复,我最后使用了以下代码: foreach ($myArray as $key => &$value) { $d = DateTime::createFromFormat(self::DATE_FORMAT, $value["orderDate"]); if ($d->getTimestamp() &

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

根据指定为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]);
      }
 }
foreach($myArray作为$key=>&$value)
{
$d=DateTime::createFromFormat(self::DATE_格式,$value[“orderDate”]);
如果($d->getTimestamp()<$startDateTime->getTimestamp()| |$d->getTimestamp()>$endDateTime->getTimestamp())
{
未设置($myArray[$key]);
}
}
范围内的函数($thingy){
返回$thingy->theDate>=$startDate&&$thingy->theDate<$endDate;
}
$filtered=array_filter($unfiltered,“inRange”);

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

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

$item->dateitem假设您的对象包含日期的字符串表示形式,我们将使用()将其转换为数字时间戳

要过滤掉不在给定范围内的所有内容(保持值与开始/结束值匹配),请执行以下操作:

$rangeStart=strottime('-1年');
$rangeEnd=strotime(“昨天”);
数组过滤器($array,function($var)use($rangeStart,$rangeEnd){
$utime=strottime($var->date);
返回$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' );
函数cmp($a,$b){
$aTime=strottime($a->date);
$b时间=标准时间($b->日期);
如果($aTime==$bTime){返回0;}
否则{返回$aTime<$B时间?-1:1;}
}
usort($array,'cmp');

如果这些对象碰巧来自数据库,您也可以更改SQL查询以返回已按日期排序的结果。您可以使用
排序方式
关键字..回答另一个问题。哈!我回答了一半,忘了我在回答什么。所以您也可以进行排序。我想我会去做一些茶:)
 $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' );