如何在PHP中对日期数组中的日期从最近日期到最远日期进行排序

如何在PHP中对日期数组中的日期从最近日期到最远日期进行排序,php,arrays,sorting,Php,Arrays,Sorting,回答了这个问题,但我不太明白答案 我有一个包含日期的数组 我想对列date\u res(results date)按最近的日期排序,而不是按最大值或最小值排序 我的阵列可能会帮助你 <?php $today = date('Y-m-d'); $arr = array( [ 'id' => '1', 'date' => '2020-03-27', 'date_end' => '2020-05-02 17:00',

回答了这个问题,但我不太明白答案

我有一个包含日期的数组

我想对列
date\u res
results date)按最近的日期排序,而不是按最大值或最小值排序

我的阵列可能会帮助你

<?php 
$today = date('Y-m-d');
$arr = array(
    [
        'id' => '1',
        'date' => '2020-03-27',
        'date_end' => '2020-05-02 17:00',
        'date_res' => '2020-06-02'
    ],
    [
        'id' => '2',
        'date' => '2020-04-27',
        'date_end' => '2020-06-02 17:00',
        'date_res' => '2020-08-02'
    ],
    [
        'id' => '3',
        'date' => '2020-06-27',
        'date_end' => '2020-07-02 17:00',
        'date_res' => '2020-08-02'
    ],
    [
        'id' => '4',
        'date' => '2021-01-01',
        'date_end' => '2021-02-01 17:00',
        'date_res' => '2021-03-01'
    ],
    [
        'id' => '5',
        'date' => '2021-02-01',
        'date_end' => '2021-03-01 17:00',
        'date_res' => '2021-04-01'
    ],
    [
        'id' => '6',
        'date' => '2021-05-01',
        'date_end' => '2021-06-01 17:00',
        'date_res' => '2021-08-01'
    ],
    [
        'id' => '7',
        'date' => '2021-02-06',
        'date_end' => '2021-01-29 17:00',
        'date_res' => '2021-01-29'
    ],
    [
        'id' => '9',
        'date' => '2021-04-27',
        'date_end' => '2021-05-03 17:00',
        'date_res' => '2021-05-03'
    ],
    [
        'id' => '10',
        'date' => '2021-02-01',
        'date_end' => '2021-02-06 17:00',
        'date_res' => '2021-05-03'
    ],
    [
        'id' => '11',
        'date' => '2021-02-02',
        'date_end' => '2021-02-07 17:00',
        'date_res' => '2021-05-05'
    ],
    [
        'id' => '12',
        'date' => '2021-03-27',
        'date_end' => '2021-02-07 17:00',
        'date_res' => '2021-06-02'
    ]);
?>

试试(注意,我在
排序日期
函数中将日期列转换为日期,因为它是字符串):

我使用您提供的数组获得所需的输出。

尝试(注意,我在
sort\u dates
函数中将date\u res列转换为date,因为它是字符串):


我使用您提供的数组获得所需的输出。

您需要将
日期
项的差异与
今天的
进行比较:

usort($arr, function($dateA, $dateB) use ($today) {
    return
        abs(strtotime($dateA['date_res']) - strtotime($today)) -
        abs(strtotime($dateB['date_res']) - strtotime($today));
});
abs
用于获取
date\u res
today
之间的“距离”,无论是在日期之前还是之后。然后比较“距离”

工作

工具书类

您需要将
日期
条目的差异与今天的
进行比较:

usort($arr, function($dateA, $dateB) use ($today) {
    return
        abs(strtotime($dateA['date_res']) - strtotime($today)) -
        abs(strtotime($dateB['date_res']) - strtotime($today));
});
abs
用于获取
date\u res
today
之间的“距离”,无论是在日期之前还是之后。然后比较“距离”

工作

工具书类


今天之前的日期应该如何处理?@John Hanley,它将从日期更改为链接,因为在结果日期结束后,结果将出现,并且有一个链接,这不是我的问题。您的问题按最接近今天的日期进行排序。在你的排序程序中,昨天和明天是一样的吗?OP似乎想要今天和日期之间的绝对差/距离从最小到最大排序。昨天和明天的距离是相等的。我不知道,但我认为如果你把yasterday放在同一个套路中没有问题,因为yasterday会被隐藏,@John Hanley今天之前的日期应该如何处理?@John Hanley,它会从日期改为链接,因为结果日期结束后,结果将出现,并有一个链接,这不是我的问题。您的问题按最接近今天的日期进行排序。在你的排序程序中,昨天和明天是一样的吗?OP似乎想要今天和日期之间的绝对差/距离从最小到最大排序。昨天和明天的距离是相等的。我不知道,但我认为如果你在同一个例程中,但yasterday没有问题,因为yasterday将被隐藏,@John Hanleyno它不工作。我测试了它,它使用你提供的相同数组对我有效。你确定从这段代码中,因为我认为我的代码中的问题是我在itI中添加了你的代码。我将以另一种方式尝试这个答案。这个答案不符合标准:
最接近今天,不是最大的或最小的
你只是在
日期上排序。不,它不工作。我测试了它,它使用你提供的相同数组对我有效。你确定从这段代码中,因为我认为我的代码中的问题是我在其中添加了你的代码。我会用另一种方式尝试这个答案。这个答案不符合标准:
最接近今天,不是最大或最小的
你只是在
日期上排序。\u res
。谢谢你,兄弟,成功了谢谢你,兄弟,成功了