Php timediff在mysql中不使用日期\格式

Php timediff在mysql中不使用日期\格式,php,mysql,time,mysqli,Php,Mysql,Time,Mysqli,我做了一个查询,使用timediff(time\u out,time\u in)作为total\u time1从另外两个名为time\u in和time\u out的字段计算total\u time1 现在,我想将该时间转换为一种更好的格式,而不是通常的hh:mm:ss,因此在同一个查询中,我将DATE\u格式(total\u time1,“%l:%I”)转换为total\u time2,但由于某种原因,每当我输入新的进出时间时,它都不起作用 以下是查询: $sql="SELECT

我做了一个查询,使用
timediff(time\u out,time\u in)作为total\u time1
从另外两个名为
time\u in
time\u out
的字段计算
total\u time1

现在,我想将该时间转换为一种更好的格式,而不是通常的
hh:mm:ss
,因此在同一个查询中,我将
DATE\u格式(total\u time1,“%l:%I”)转换为total\u time2
,但由于某种原因,每当我输入新的进出时间时,它都不起作用

以下是查询:

$sql="SELECT 
        DATE_FORMAT(time_in, '%l:%i %p') AS time_in,
        DATE_FORMAT(time_out, '%l:%i %p') AS time_out,
        timediff(time_out, time_in) AS total_time1,
        DATE_FORMAT(total_time1, '%l:%i') AS total_time2,
      FROM $table";

$result = $mysqli->query($sql);

while($row = $result->fetch_array()){
    <td><?php echo $row['time_in']; ?></td>
    <td><?php echo $row['time_out']; ?></td>
    <td><?php echo $row['total_time1']; ?></td>
    <td><?php echo $row['total_time2']; ?></td>
}
$sql=“选择
日期格式(时间单位,'%1:%i%p')作为时间单位,
日期格式(超时,“%l:%i%p”)作为超时,
timediff(超时,超时)作为总时间1,
日期格式(总时间1,“%l:%i”)为总时间2,
从$table开始”;
$result=$mysqli->query($sql);
而($row=$result->fetch_array()){
}

我在它自己的页面上的一个大表上显示所有内容(包括时间输入、输出、totaltime1和totaltime2)
total_time1
就像我说的那样工作,但是
total_time2
不显示任何内容。没有错误或任何东西。我做错了什么

不能使用在同一查询中创建的别名

你必须这样再写一遍

$sql="SELECT 
        DATE_FORMAT(time_in, '%l:%i %p') AS time_in,
        DATE_FORMAT(time_out, '%l:%i %p') AS time_out,
        timediff(time_out, time_in) AS total_time1,
        DATE_FORMAT(timediff(time_out, time_in), '%l:%i') AS total_time2
      FROM $table";
另外,如果你想格式化时间

您不应使用
DATE\u格式
,而应使用
TIME\u格式

像这样

$sql="SELECT 
        DATE_FORMAT(time_in, '%l:%i %p') AS time_in,
        DATE_FORMAT(time_out, '%l:%i %p') AS time_out,
        timediff(time_out, time_in) AS total_time1,
        DATE_FORMAT(timediff(time_out, time_in), '%l:%i') AS total_time2
      FROM $table";
$sql="SELECT 
            TIME_FORMAT(time_in, '%l:%i %p') AS time_in,
            TIME_FORMAT(time_out, '%l:%i %p') AS time_out,
            timediff(time_out, time_in) AS total_time1,
            TIME_FORMAT(timediff(time_out, time_in), '%l:%i') AS total_time2
          FROM $table";

关于MySQL中所有日期和时间函数的文档

您不能自行引用该列。你还有一个额外的逗号,我猜是打字错误

你需要这样的东西:

$sql="SELECT time_in, time_out, total_time1, DATE_FORMAT(total_time1, '%l:%i') AS total_time2
FROM (SELECT 
        DATE_FORMAT(time_in, '%l:%i %p') AS time_in,
        DATE_FORMAT(time_out, '%l:%i %p') AS time_out,
        timediff(time_out, time_in) AS total_time1
      FROM $table) a";

现在所有内容都显示为“12:00”。格式正确,但由于某些原因,它没有显示正确的时差。time\u in和time\u out是否为datetime类型?total\u time1在hh:mm:ss中显示良好。total_time2似乎以12:00格式显示所有内容,而其他内容则留空。似乎找不到任何模式。您也可以在此处找到所有格式,您不应该使用日期格式来格式化时间,而应该使用时间格式。我会更新我的答案