在0上对日期进行数月或数天的排序

时间:2015-10-03 01:43:22

标签: php sorting date datetime

我必须在PHP上排序一些日期,其中一些日期可以包含' 0'在月份或日期,例如:

1951-11-00

1951年12月14日

问题是这个日期不会与包含所有年,日和月值的其他日期一起排序。

首先我尝试使用array_multisort:

    foreach ($Objects as $key => $part) {
        $sort[$key] = strtotime($part['Object']['date']);
    }
    array_multisort($sort, SORT_DESC, $Objects );

它排序好,但是它首先对月份或日期有00的值进行排序,然后对正常日期进行排序,例如:

1937-05-00

1937-04-00

1935-11-00

1951年12月16日

1951年12月14日

如您所见,订单不合适,因为1951年的日期应该先行,但排序算法会将日期分为两组,分别为00和具有完整数字的日期。 / p>

然后我尝试了uasort,但我没有取得好成绩。

如何正确排序这些日期?对于我放的列表,我需要它显示在此订单上(无论月份是00):

1951年12月16日

1951年12月14日

1937-05-00

1937-04-00

1935-11-00

1 个答案:

答案 0 :(得分:4)

只需将它们排序为字符串即可。当作为字符串进行比较时,它们的格式已经相似。

$dates = [
    '1937-05-00',
    '1937-04-00',
    '1935-11-00',
    '1951-12-16',
    '1951-12-14'
];

usort($dates, function($a, $b) {
    return $a < $b;
});

var_export($dates);

Demo