PHP //转换/计算日期



我试着解决这个问题已经两天了,没有成功…首先是我的代码:

php版本:5.4

SCRIPT1:

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。为什么? ?

这个更奇怪。SCRIPT2:

while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
    echo " | ".$row['total']."<br>";
    $add += strtotime($row['total']);}
echo $add;

第一个脚本计算从开始到结束的总时间。第二个函数应该从数据库中获取总次数,并计算所有条目的总和。对于每个条目,第二个脚本减去2小时。

的例子:Database => Start = 12:32:00 End = 12:32:15

Script1 Result1 = 01:00:15(这个额外的小时是从哪里来的?)固定的

每个Result1都存储在同一个表(db)中。Script2正在加载所有这些行,并通过while循环处理它们。

根据有多少条目,脚本减去几个小时。
0 Entries => Total: 00:00:00
1条目=>总数:23:00:xx
2个条目=>总数:20:00:xx
3个条目=>总数:18:00:xx
4个条目=>总数:16:00:xx
因此,对于2个条目,它继续从每次总计算中减去2个小时,这显然是不正确的。

谢谢你们。使用DateTime使这变得简单和无bug !

我不太确定你的情况下使用strtotime函数,但我已经尝试过这个解决方案,它的工作,如果你有php> 5.2:

您可以使用DateTime类和date_diff函数来获取差异日期,在这里阅读更多内容:http://us3.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');

根据这个答案,似乎默认日期从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);

问题来自:

 echo date('H:i:s', $calc);

$start - $end给出以秒为单位的期望值。这取决于date('H:i:s', 0)的值。在我的电脑上,现在不是1970年1月1日的午夜!此链接为示例:http://sandbox.onlinephpfunctions.com/code/81e56cbce16f6dacfedd2cb376b946a540bce36d.

您可以考虑从结果中减去date('H:i:s', 0)以获得正确的值。

或者使用@Ben Beri建议的DateTime,因为这是(我认为)最好的方法。

最新更新