我正在将数组排序为:
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)
)
}
答案 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
。