我真的很困惑,我尝试了很多相关方法来对可能具有不同格式的日期进行排序。
我有一个日期数组,例如:
"0"=>"09.10.2012"
"1"=>"02.10.12"
"2"=>"27.09.15"
"2.0"=>"28.09.2012"
"2.1"=>"29.9.2012"
"2.2"=>"29.09.2012"
"3"=>"9.10.2012"
"3.1"=>"23.4.10"
"4"=>"28.09.2012"
"5"=>"26.10.2012"
"6"=>"12.09.98"
"6.0"=>"05.03.2013"
"6.1"=>"23.4.2013"
(键是字符串,这是有原因的)
现在我知道它们的格式将相同-天,月,年。但是位数可以更改,如在给定数组中看到的那样。
我基本上将它们解析为day-month-year(strtotime()
根据文档可以识别的欧洲格式),然后将它们更改为Unix时间戳,我使用对该数组进行排序asort()
,但收到了不好的结果:
[6]->[] -- 12.09.98
[1]->[1034380800] -- 02.10.12
[2.0]->[1348790400] -- 28.09.2012
[4]->[1348790400] -- 28.09.2012
[2.2]->[1348876800] -- 29.09.2012
[2.1]->[1348876800] -- 29.9.2012
[3]->[1349740800] -- 9.10.2012
[0]->[1349740800] -- 09.10.2012
[5]->[1351209600] -- 26.10.2012
[6.0]->[1362441600] -- 05.03.2013
[6.1]->[1366675200] -- 23.4.2013
[3.1]->[1681084800] -- 23.4.10
[2]->[1820966400] -- 27.09.15
如您所见,[6](unixtime)
包含False,并且strtotime()
转换日期失败。
这是我的代码:
function sortArrays_ByDate($target){
foreach($target as $key_s => $val_s) { $date_exp = preg_replace('#(\.|_)#','-',$val_s); $target[(string)$key_s] = $date_exp; }
foreach($target as $key_s => $val_s) { $date_exp = strtotime($val_s); $target[(string)$key_s] = $date_exp; }
asort($target);
return $target;
}
有人可以解释一下怎么了...
谢谢
由于某种原因,欧洲人-在98年没有工作,因此我建议将年份编辑为4位数字格式:
function sortArrays_ByDate($target){
foreach($target as $key_s => $val_s) {
$day = substr($val_s, 0, strpos($val_s, '.'));
$month = substr($val_s, strpos($val_s, '.')+1, strrpos($val_s, '.')-strpos($val_s, '.')-1);
$year = substr($val_s, strrpos($val_s, '.')+1);
if($year > 79 && $year <= 99)
$year = "19" . $year;
elseif($year >=00 && $year <= 79)
$year = "20" . $year;
$target[(string)$key_s] = strtotime($day .'.'. $month .'.'. $year);
}
asort($target);
/*foreach($target as $value)
echo date("d.m.Y", $value) . '</br>';
changed for edit time to d.m.Y ->
*/
foreach($target as $key_s => $val_s)
$target[(string)$key_s] = date("d.m.Y", $target[(string)$key_s]);
return $target;
}
然后它为我工作,并且数组正确排序。
编辑 //
结果是:
Array
(
[0] => 09.10.2012
[1] => 02.10.12
[2] => 27.09.15
[2.0] => 28.09.2012
[2.1] => 29.9.2012
[2.2] => 29.09.2012
[3] => 9.10.2012
[3.1] => 23.4.10
[4] => 28.09.2012
[5] => 26.10.2012
[6] => 12.09.98
[6.0] => 05.03.2013
[6.1] => 23.4.2013
)
Array
(
[6] => 12.09.1998
[3.1] => 23.04.2010
[4] => 28.09.2012
[2.0] => 28.09.2012
[2.1] => 29.09.2012
[2.2] => 29.09.2012
[1] => 02.10.2012
[3] => 09.10.2012
[0] => 09.10.2012
[5] => 26.10.2012
[6.0] => 05.03.2013
[6.1] => 23.04.2013
[2] => 27.09.2015
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句