【发布时间】:2018-04-25 13:00:05
【问题描述】:
我正在尝试在我的应用程序中添加一个功能,该功能按周、月等计算用户在系统中花费的总时间。
$select = "SELECT TOTAL_HRS FROM timeclock WHERE USERNAME = '$sessuser' AND CLOCK_OUT BETWEEN '$dbpast' AND '$dbnow'";
我有两个采样时间条目的 MySql 结果:00:00hr:04min:08s 和 00:00hr:12min:52s。用户可以拥有更多。
TOTAL_HRS 是一个 varchar 列,所以当我在它上面加上 sum() 时,它返回一个 0。
这是我目前所拥有的:
while($row = $query->fetch_assoc()){
print_r($row);
$sanitized = preg_replace("/[^0-9:]+/", "", $row);
print_r($sanitized);
$joinarr = implode(':', $sanitized);
$parts = explode(':', $joinarr);
print_r($parts);
$zerodate = new DateTime('0000-01-01 00:00:00');
$addhrs += $parts[1];
$addmin += $parts[2];
print_r($addhrs);
$interval = $zerodate->add(new DateInterval('P' .$parts[0].'DT'.$parts[1].'H'.$parts[2].'M'.$parts[3].'S'));
$totalhrs = $interval->format('%D:%Hhr:%Imin:%Ss');
print_r($totalhrs);
}
我得到时髦的垃圾作为回报:0%Sat:%0012Sat, 01 Jan 0000 00:12:52 +0100:%001121:%st52
我需要返回的是:类似于:00:00hr:17min:00s。我不打算存储它,只是希望它显示在页面上。
我需要一些帮助来解决这个问题。我确信有更好的方法。我不擅长功能。或者我应该通过 jquery 发送结果并在那里处理它们?哪一方在处理 DateTime 方面效率更高?非常感谢您的帮助。谢谢!
【问题讨论】:
-
您如何存储用户花费的时间?将它存储在几秒钟内可能会更容易,或者作为带有开始和结束时间的时间戳。
-
...我没想到。哈哈。我将开始和结束时间存储在我的数据库上的 DateTime 字段中,然后总计“会话时间”,将它们转换为字符串存储。我希望那些显示为字符串。 DateTime 和 Timestamp 有什么区别?
-
时间戳是自 1970 年以来经过的秒数(当前为 1510524424)。日期时间是日期和时间。但是有一些函数可以减去日期时间。见stackoverflow.com/questions/10907750/…。
varchar和数学将是一个巨大的痛苦,不要走那条路。