我想要的很简单,我在我的mysql数据库中有时间戳,记录日期和时间数据寄存器。我想要的是计算时间戳和当前时间之间的timediff,然后从3小时中减去hh:mm:ss格式的剩余时间,请帮帮忙。
发布于 2017-03-08 14:14:53
您应该在查询中使用以下部分:
SELECT TIME_FORMAT(SEC_TO_TIME(AVG(TIMESTAMPDIFF(SECOND, NOW(), column_with_date_to_compare))), '%H:%i')
如果您不想要平均值而是每行一个结果(或者您只需要检查一行)(或使用GROUP BY某项),则必须跳过AVG部分
那部分‘然后从3小时减去’,我不明白。您只想显示时间少于3小时的记录吗?只需使用WHERE TIME(record_to_check) > (NOW() - 10800)。
如果你想添加,计算或做其他事情来影响结果,只需在SEC_TO_TIME之前完成,你可以在那里做数学计算(用秒)。
发布于 2017-03-08 14:45:50
我已经将你的问题解释为如何计算从存储在数据库中的日期时间开始的3小时内的剩余时间,以HH:MM:SS格式显示...
我通常发现在php中操作日期/时间比在SQL查询中更容易。所以我的方法是:
从database
假设已经从数据库中读取了$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|None,time's up
08-03-2017 14:30:00|1488983400|1488994200|1488983982|10218|02:50:18
显然,在现实中你只对最后一个领域感兴趣,但其他领域会向你展示你在这个过程中玩的是什么。
https://stackoverflow.com/questions/42672494
复制