我正试图对日期表进行排序,但我似乎遇到的问题是这些日期是格式化为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));
}
?>