通过日期和时间转换订购php

时间:2015-11-06 10:04:28

标签: php mysql sorting strtotime

我有3个数据表存储在数据库中,每个数据库包含一个日期和时间字段。我从每个表中提取所有相关数据并将它们连接到一个数组。我现在需要先按日期对数组进行排序,然后再对时间进行排序。我目前按日期排序,工作正常,但时间有时可能是正确的,有时是错误的

我目前正用于收集数据:

[_manager performSelector:@selector(setAllowsBackgroundLocationUpdates:) withObject:@{1}];

我用它来分类

$results = [];

$sql_assign = mysql_query("SELECT * FROM `tk_assign` WHERE ticket_id = $tk_id");
$sql_update = mysql_query("SELECT * FROM `tk_update` WHERE ticket_id = $tk_id");
$sql_status = mysql_query("SELECT * FROM `tk_status_change` WHERE ticket_id = $tk_id");

while($row = mysql_fetch_assoc($sql_assign)){
     $results[] = $row;
}

while($row = mysql_fetch_assoc($sql_update)){
     $results[] = $row;
}

while($row = mysql_fetch_assoc($sql_status)){
     $results[] = $row;
}

我已经考虑过把它变成时间码,但这也没有用。任何帮助将不胜感激

示例时间和日期:

$orderByDate = $my2 = array();
foreach($results as $key=>$row)
{
    $my2 = explode('/',$row['date']);
    $my3 = explode('/',$row['time']);
    $my_date2 = $my2[1].'/'.$my2[0].'/'.$my2[2];
    $orderByDate[$key] = strtotime($my_date2);  
}    
$sorted = array_multisort($orderByDate, SORT_ASC, $results);

2 个答案:

答案 0 :(得分:0)

如果您使用PHP > 5.2,则应使用以下方式。

$orderByDate = $my2 = array();
foreach($results as $key=>$row)
{
    $myDateTime = DateTime::createFromFormat('d/m/Y', $date);
    $newDateString = $myDateTime->format('Y-m-d');
    $orderByDate[$key] = strtotime($newDateString." ".$row['time']);  
}    
$sorted = array_multisort($orderByDate, SORT_ASC, $results);

答案 1 :(得分:0)

我认为这一行是错误的:

$my3 = explode('/',$row['time']);

可能应该是:

$my3 = explode(':',$row['time']);

在任何情况下,您甚至都没有在排序算法中使用$my3变量。

这是另一种解决方案。合并数组后,添加以下代码:

for ($i =0; $i < count($results); $i++){
    $results[$i]['datetime'] = $results[$i]['date'].' '.$results[$i]['time'];
}   

function compareDateTime($a, $b) {
    $mya = new DateTime();
    $mya->createFromFormat('d/m/Y H:i:s', $a['datetime']);

    $myb = new DateTime();
    $myb->createFromFormat('d/m/Y H:i:s', $b['datetime']);

    if ($mya == $myb)
        return 0;
    if ($mya > $myb)
        return 1;
    return -1;
}

usort($results, 'compareDateTime');