以月或日排序日期,以0为值


Sorting dates with months or days on 0

我必须对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,另一组包含完整的数字。

然后我试着排序,但是我没有得到好的结果。

我怎样才能正确排序这些日期?对于我所放置的列表,我需要它按照这个顺序显示(不管月份是否在00):

1951-12-16

1951-12-14

1937-05-00

1937-04-00

1935-11-00

按字符串排序。当将它们作为字符串进行比较时,它们已经处于可比的格式。

$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);
演示