PHP-MySQL:将前导零添加到TIMESTAMPDIFF连接输出

时间:2016-10-21 15:41:36

标签: php mysql ajax

我想在两个日期时间和我当前的方法之间显示时间差,除了当小时,分钟和秒小于10时,它只显示一个数字,我想添加前导零到输出。

查询看起来像这样。

SELECT *,
CONCAT(
MOD( TIMESTAMPDIFF(hour, start_time, end_time), 24), ':',
MOD( TIMESTAMPDIFF(minute, start_time, end_time), 60), ':',
MOD( TIMESTAMPDIFF(second, start_time, end_time), 60)
) AS total_time
FROM test_db

当时间数字小于10时,它会输出以下结果。

4:53:21
10:1:9
6:3:8

我的目标是输出显示如下。

04:53:21
10:01:09
06:03:08

注意:我将此结果传递给一个数组,然后将该数组发送到AJAX回调以在动态生成的表上输出结果。如果有一个更好的解决方案可以使用jquery / ajax,那么我不仅仅对任何建议持开放态度。但是,由于我最终需要将此结果导出到excel文件,所以我一直倾向于使用查询解决方案。

3 个答案:

答案 0 :(得分:1)

一种方法是在前面加零,然后取最右边的两个字符......

  SEC_TO_TIME(MOD(TIMESTAMPDIFF(SECOND,start_time,end_time),24*60*60))

仅当expr的值为非负数且不超过两位数时才有效。

作为一种完全不同的方法,您可以在几秒钟内获得差异,并转换为TIME数据类型...

'0'

小时部分仍然可能少于两位数,因此您可以应用与上面相同的模式...前置DATE_FORMAT( timeexpr, '%T')字符,并取最右边的八个字符。

或者,您可以将其包装在{{1}}

答案 1 :(得分:1)

您可以组合使用TIME_FORMAT和SEC_TO_TIME,并避免使用MOD()函数将小时数限制为2位输出。

var viewer = OpenSeadragon({
    ...,
    overlays: [
        {
            id: 'overlay1',
            ...
        }
    ]
});

new OpenSeadragon.MouseTracker({
    element: 'overlay1'
});

答案 2 :(得分:0)

尝试:

  DATE_FORMAT(concat part, '%H:%m:%s')

并查看它是否适合您