2

オブジェクトの配列があります。各オブジェクトには日付値が含まれています。

範囲が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]);
      }
 }
4

3 に答える 3

4

これが基本的な考え方です。特定のオブジェクト タイプと日付タイプに合わせて微調整する必要があります。

foreach ($myarray as $item)
    if ($item->dateitem >= $startDate  &&  
        $item->dateitem <= $endDate)
            $newarray[] = $item;
于 2012-05-19T19:32:55.733 に答える
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' );
于 2012-05-19T19:34:12.477 に答える
2
function inRange($thingy) {
  return $thingy->theDate >= $startDate && $thingy->theDate < $endDate;
}

$filtered = array_filter($unfiltered, "inRange");
于 2012-05-19T19:32:39.383 に答える