如何在HH:MM:SS中获取当前日期时间和时间戳值之间的时间差

时间:2017-03-08 13:21:42

标签: php mysql date datetime timer

我想要的很简单,我的mysql数据库中有时间戳记录日期和时间数据寄存器。我想要的是计算时间戳和当前时间之间的时间差,然后从3小时减去知道剩余时间hh:mm:ss格式,请有人帮忙。

2 个答案:

答案 0 :(得分:0)

您应该在查询中使用以下部分:

SELECT TIME_FORMAT(SEC_TO_TIME(AVG(TIMESTAMPDIFF(SECOND, NOW(), column_with_date_to_compare))), '%H:%i') 

如果您不想要平均值但每行需要一个结果(或者您只需要检查一行),则必须跳过AVG部分(或使用GROUP BY [something])

部分'然后减去3小时',我不明白。您只想显示时间少于3小时的记录?只需使用WHERE TIME(record_to_check)> (现在() - 10800)。

如果你想添加,计算或做其他事情来影响结果,只需在SEC_TO_TIME之前这样做,你可以在那里做数学(用秒)。

答案 1 :(得分:0)

我已将您的问题解释为如何计算从存储在数据库中的日期时间开始的3小时内的剩余时间,以HH:MM:SS格式显示...

我通常发现在php中操作日期/时间比使用SQL查询更容易。所以我的方法是:

  • 从数据库中读取字符串
  • 将它们转换为unix时间戳(即 自给定纪元以来经过的秒数)
  • 以数学方式操纵它们(即加上3小时并减去时间)
  • 最后将结果转换回您选择的日期/时间 格式。

假设已从您的数据库中读取$ start_str

$start_str = '08-03-2017 11:10:00';
$start_ts = strtotime("$start_str");
$end_ts = $start_ts + (3 * 60 * 60);
$now_ts = strtotime('NOW');
$remaining_ts = $end_ts - $now_ts;
$remaining_str = ($remaining_ts > 0)? sprintf('%02d:%02d:%02d', ($remaining_ts/3600),($remaining_ts/60%60), $remaining_ts%60) : "None, time's up";

echo ($start_str.'|'.$start_ts.'|'.$end_ts.'|'.$now_ts.'|'.$remaining_ts.'|'.$remaining_str);

...实例
08-03-2017 11:10:00 | 1488971400 | 1488982200 | 1488983863 | -1663 | 无,时间到了
08-03-2017 14:30:00 | 1488983400 | 1488994200 | 1488983982 | 10218 | 02:50:18

显然,实际上你只对最后一个领域感兴趣,但其他人会告诉你在这个过程中你正在玩什么。