在PHP中转换和排序日期


converting and sorting dates in PHP

我正试图对日期表进行排序,但我似乎遇到的问题是这些日期是格式化为d M Y的字符串(因此类似"04 SEPT 2016")。

我假设这些日期不是作为时间戳存储在数据库中(如果有意义的话),而是作为需要转换回可排序的正常字符串。

在PHP中可以使用datetime接口。请参阅手册上有关格式说明符的详细信息。它允许通过提供格式说明符将日期解析为对象。DateTime类支持排序和操作符,如<, >, ==等。

您可以使用:

解析日期
$list = [];
$d = DateTime::createFromFormat($time, 'd M Y');
$list[] = $d;  ### add to list

现在你可以排序了,因为DateTime支持排序:

sort($list);
reset($list);
foreach($list as $sorted_date) {
  ...
}

参见2

这是有意义的,如何处理这取决于你想做什么。

你可以使用php的datetime函数将字符串转换为日期:(程序方法)

<?php
$date = date_create_from_format('j-M-Y', '15-Feb-2009');
echo date_format($date, 'Y-m-d');
?>
http://php.net/manual/en/datetime.createfromformat.php


或者,如果你想在MySQL数据库查询中选择/更新/修改/等(稍微假设你将使用MySQL),你可以使用STR_TO_DATE函数

STR_TO_DATE('21,5,2013','%d,%m,%Y');
http://www.mysqltutorial.org/mysql-str_to_date/

这里更大的问题是您是否有范围将日期从字符串转换为DB内的日期,因为这是正确的方式来做事情。

选择STR_TO_DATE (, ' % m/% d/% Y ')FROM table ORDER BY STR_TO_DATE(field, '%m/%d/%Y')

如果你想用PHP排序,那么你可以试试这个技巧:

<?php
    $myarray=array(
        "2 SEPT 2016",
        "9 SEPT 2016",
        "1 OCT 2016",
        "3 DEC 2016",
        "4 SEPT 2016",
    );
    usort($myarray, "cmpare");
    print_r($myarray);
    function cmpare($x, $y){ 
        return strcmp(strtotime($y), strtotime($x)); 
    }
?>