对格式为 d M Y [重复] 的日期数组进行排序

问题描述 投票:0回答:4

我正在尝试对日期表进行排序,但我似乎遇到的问题是这些日期是格式为

d M Y
的字符串(所以类似于
"04 SEPT 2016"
)。

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

php sorting date
4个回答
1
投票

在 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


1
投票

这确实有道理,而你如何处理这个问题将取决于你想做什么。

您可以使用 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/

这里更大的问题是您是否有范围将日期从字符串转换为数据库中的日期,因为这是正确的处理方法。


0
投票

选择 STR_TO_DATE(字段,'%m/%d/%Y') FROM 表 ORDER BY STR_TO_DATE(字段,'%m/%d/%Y')


0
投票

如果你想用 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)); 
    }
?>
© www.soinside.com 2019 - 2024. All rights reserved.