如何在PHP中排序日期数组?

时间:2016-11-07 10:20:54

标签: php arrays sorting date

我是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但不能正常工作。

7 个答案:

答案 0 :(得分:22)

因为数组项是字符串,所以需要将它们转换为日期,然后比较排序。使用自定义函数的usort()排序数组,对于这种情况是一个很好的排序函数。

$arr = array('11-01-2012', '01-01-2014', '01-01-2015', '09-02-2013', '01-01-2013');    
function date_sort($a, $b) {
    return strtotime($a) - strtotime($b);
}
usort($arr, "date_sort");
print_r($arr);

检查demo

中的结果

答案 1 :(得分:2)

尝试以下代码:

<?php 

$array[0] = '11-01-2012';
$array[1] = '01-01-2011';
$array[2] = '09-02-2013';
$array[3] = '01-01-2014';
$array[4] = '01-01-2015';

function cmp($a, $b)
{
    $a = date('Y-m-d', strtotime($a));
    $b = date('Y-m-d', strtotime($b));

    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
usort($array, "cmp");

foreach ($array as $key => $value) {
    echo "[$key]=> $value <br>";
}
?>

答案 2 :(得分:1)

开箱即用使用时间函数生成ts并排序

<?php
  $out = array();
  // $your_array is the example obove
  foreach($your_array as $time) {
  $out[strtotime($time)] = $time;
  }
  // now $out has ts-keys and you can handle it

  ...
 ?>

ksort

答案 3 :(得分:0)

试试这个,

<?php 
$array = [ '11-01-2012', '01-01-2014', '01-01-2015', '09-02-2013', '01-01-2013' ];
function sortFunction( $a, $b ) {
    return strtotime($a) - strtotime($b);
}
usort($array, "sortFunction");
var_dump( $array );
?>

将日期排序为您想要的顺序。

答案 4 :(得分:0)

您绝对可以使用下面的给定代码对数组进行时间戳排序,但是我想将您的注意力转移到我以前存储的时间格式上。以这种格式存储时间有很多好处。在https://stackoverflow.com/a/59912185/7997043

上了解有关此内容的更多信息
function compareByTimeStamp($a, $b ) {
    return strtotime($b) - strtotime($a);
}
$arr = array("2020-02-11 00:00:00", "2020-02-13 00:00:00", "2020-02-08 00:00:00"); 
usort($arr, "compareByTimeStamp"); 
echo json_encode($arr);

答案 5 :(得分:0)

我通过应用此行解决了这个问题。

sort($imdarrayGG['newDate']);

在添加值之前输出

[Mon Jul  6 10:33:23 2020] Array
(
    [coursedate] => 2020-07-17
    [newDate] => Array
        (
            [0] => 2020-07-30
            [1] => 2020-07-07
            [2] => 2020-07-08
            [3] => 2020-07-17
        )

)

我把线放好之后,输出将变成这样。

[Mon Jul  6 10:35:42 2020] Array
(
    [coursedate] => 2020-07-17
    [newDate] => Array
        (
            [0] => 2020-07-07
            [1] => 2020-07-08
            [2] => 2020-07-17
            [3] => 2020-07-30
        )

)

已经排序的日期是最新日期。

答案 6 :(得分:-1)

使用DateTime排序日期:

$a = array(
    new DateTime('2016-01-02'),
    new DateTime('2016-05-01'),
    new DateTime('2015-01-01'),
    new DateTime('2016-01-01')
);
asort($a);
var_dump($a);

输出结果为:

array(4) {
  [2]=>
  object(DateTime)#3 (3) {
    ["date"]=>
    string(26) "2015-01-01 00:00:00.000000"
    ["timezone_type"]=>
    int(3)
    ["timezone"]=>
    string(10) "US/Pacific"
  }
  [3]=>
  object(DateTime)#4 (3) {
    ["date"]=>
    string(26) "2016-01-01 00:00:00.000000"
    ["timezone_type"]=>
    int(3)
    ["timezone"]=>
    string(10) "US/Pacific"
  }
  [0]=>
  object(DateTime)#1 (3) {
    ["date"]=>
    string(26) "2016-01-02 00:00:00.000000"
    ["timezone_type"]=>
    int(3)
    ["timezone"]=>
    string(10) "US/Pacific"
  }
  [1]=>
  object(DateTime)#2 (3) {
    ["date"]=>
    string(26) "2016-05-01 00:00:00.000000"
    ["timezone_type"]=>
    int(3)
    ["timezone"]=>
    string(10) "US/Pacific"
  }
}