如何在php中对日期数组进行排序?

新手上路,请多包涵

我是 php 新手,我有 php 日期数组

[0] => 11-01-2012
[1] => 01-01-2014
[2] => 01-01-2015
[3] => 09-02-2013
[4] => 01-01-2013

我想对它进行排序:

 [0] => 11-01-2012
[1] => 01-01-2013
[2] => 09-02-2013
[3] => 01-01-2014
[4] => 01-01-2015

我使用 asort 但不工作。

原文由 Mojilo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 884
2 个回答

如果日期是“Mysql”格式( Y-m-dY-m-d H:i:s ),那么您可以立即对数组进行排序,无需特殊操作:

 $arr = ["2019-11-11", "2019-10-10","2019-11-11", "2019-09-08","2019-05-11"];
sort($arr);

如果日期被本地化或格式化(您应该避免,仅在输出之前格式化日期),您必须使用自定义排序功能,例如 usort() ,这将在比较之前将日期转换为可排序格式.

将日期转换为可排序格式的最简单方法是使用 strtotime() 函数将其转换为 uninx 时间戳:

 $arr = ['11/01/2012', '03/16/2022', '12/26/2021', '01/01/2014', '09/02/2013'];
usort($arr, function ($a, $b) {
    return strtotime($a) - strtotime($b);
});
print_r($arr);

演示 中检查结果

但是,可能存在陷阱,因为在不同的国家/地区,相同的日期格式可能意味着不同的日期。您的示例格式正是这种情况,如果日期为 ['03-16-2022', '12-26-2021', '06-06-2022'] ,上述函数将返回错误结果。因此,最好明确定义日期格式,如 本答案 中所述

原文由 d.coder 发布,翻译遵循 CC BY-SA 4.0 许可协议

提供的示例日期数据并不清楚它们是什么格式。可以肯定的是,您应该使用 DateTime::createFromFormat 然后明确指定格式:

 $dates = ['11-01-2012', '03-16-2022', '12-26-2021', '01-01-2014', '01-01-2015', '09-02-2013', '01-01-2013'];

function sort_date($a, $b) {
    return \DateTime::createFromFormat('m-d-Y', $a) <=> \DateTime::createFromFormat('m-d-Y', $b);
}

usort($dates, "sort_date");

原文由 DAMIEN JIANG 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题