我两天来一直在尝试解决这个问题,但没有成功...... 首先是我的代码:
PHP 版本:5.4
脚本1:
query = "SELECT start, end FROM timetable WHERE ........";
$result = mysql_query($query, $db) or die(mysql_error());
$sqlarr = mysql_fetch_array($result, MYSQL_ASSOC);
$times = array($sqlarr['start'], $sqlarr['end']);
$calced = strtotime($times[1]) - strtotime($times[0]);
$total = date("H:i:s", $calced-3600); //<-- -3600 Fixed it
echo "<br>Total: ".$total;
开始和结束时间的格式为 00:00:00。每次此脚本计算时,都会将 1 小时添加到结果中。因此,如果我要获取 5 分钟的结果,我将得到 01:00:05。 为什么???
这个就更奇怪了。 脚本2:
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
echo " | ".$row['total']."<br>";
$add += strtotime($row['total']);}
echo $add;
第一个脚本计算从开始到结束的总时间。第二个应该从数据库中获取总时间并计算所有条目的总和。对于每个条目,第二个脚本会减少 2 小时。
示例: 数据库 => 开始 = 12:32:00 结束 = 12:32:15
Script1 Result1 = 01:00:15(这个额外的时间从哪里来?)已修复
每个 Result1 都存储在同一个表(db)中。 Script2 正在加载所有这些行并通过 while 循环处理它们。
根据有多少条目,脚本减去几个小时。
0 条 => 总计:00:00:00
1 条记录 => 总计:23:00:xx
2 条记录 => 总计:20:00:xx
3 条记录 => 总计:18:00:xx
4 条记录 => 总计:16:00:xx
因此,对于 2 个条目,它会继续从每个总计算中减去 2 小时,这显然是不正确的。
谢谢你们。使用 DateTime 使这变得简单且无错误!
最佳答案
我不太确定您使用 strtotime
函数的情况,但我已经尝试过这个解决方案并且它有效,如果您有 php > 5.2:
您可以使用DateTime类和 date_diff 函数来获取差异日期,请在此处阅读更多信息:https://www.php.net/manual/en/datetime.diff.php
示例:
// start date
$start = new DateTime("09:23:38");
// end date
$end = new DateTime("09:23:54");
// calculate difference
$calc = date_diff($start, $end);
// prints 00:00:16
echo $calc->format('%h:%i:%s');
根据this answer默认情况下日期似乎从 1:00:00
开始,因此您可以将日期减去 3600 秒(1 小时),如下所示:
$start = strtotime("11:23:38");
$end = strtotime("11:23:54");
$calc = $end - $start;
echo date('H:i:s', $calc - 3600);
关于PHP//转换/计算DATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23823725/