php错误的结果按日期排序数组

时间:2011-03-24 02:38:05

标签: php arrays date

我正在将数组排序为:

function date_compare($a, $b)
{
    $t1 = strtotime($a['date']);
    $t2 = strtotime($b['date']);
    return $t1 - $t2;
}    
usort($array, 'date_compare');

但是,正如您可以看到下面的输出,日期未排序。知道为什么吗?感谢

Array
(
    [0] => Array
        (
            [id] => 16870
            [date] => Tue, 22 Mar 2011 13:12:19 +1100
            [bar] => Foo
        )

    [1] => Array
        (
            [id] => 16871
            [bar] => foo
            [date] => Mon, 21 Mar 2011 23:06:32 -0500 (CDT)
        )

    [2] => Array
        (
            [id] => 16872
            [bar] => foo
            [date] => Tue, 22 Mar 2011 00:37:01 -0500 (CDT)
        )
}

2 个答案:

答案 0 :(得分:4)

如果考虑时区,strtotime会对时区进行排序。

答案 1 :(得分:0)

正如其他人所指出的,日期正在正确分类。您可能想要执行以下操作:

foreach ($dates as $i => $date)
{
  $dates[$i]['ts'] = strtotime($date['date']);
  $dates[$i]['date'] = date('Y-m-d H:i:s', $dates[$i]['ts']);
}

usort($dates, function($a, $b) { return $a['ts'] - $b['ts']; });

这里我为每个日期创建一个ts属性,因此每个排序比较不需要调用strtotime()两次。其次,我将日期更改为当地时区。您可以根据需要调整格式字符串。

或者,您可以unset()数组的date组件,并在要打印时直接在date()组件上调用ts