通过日期和时间转换顺序 php

Converting ordering via date and time php

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

我目前正在使用什么来收集数据:

$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);

我想过把它变成时间码,但也没成功。任何帮助将不胜感激

时间和日期示例:

Date: 22/09/2015 Time: 15:32:12
Date: 22/09/2015 Time: 14:50:28
Date: 25/09/2015 Time: 12:21:58

如果您正在使用 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);

我认为这行是错误的:

$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');