2014-05-23 92 views
2

我试着去解决这个问题,因为两天没有成功... 首先我所有代码: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个小时。

示例: 数据库=>开始=十二点32分00秒结束= 12时32分十五秒

SCRIPT1结果1 =一点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使这个简单和无bug!

+0

所以我没有真正明白,* 00:00:05 + 00:00:05 = 22:00:10 *,在这个例子中,** start **和** end **是什么?所以start = 00:00:10和end = 22:00:10? – Artemkller545

+0

生病编辑我的第一篇文章,让它更清楚一点。 – C4u

回答

2

我没有真正使用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'); 

所述的T Ø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); 
+0

我是一个转换和计算日期和时间的新手。我在一个测试页上试了这个。现在工作。我得到0:0:x。是否有可能把这个变成00:00:xx? – C4u

+0

阅读我的答案编辑。 – Artemkller545

+0

好的。 -3600固定我的第一个问题。现在还有第二个。 “总次数”一起存储在1个表格中。第二个脚本加载所有条目并使它们变为sumarizes。对于我表格中的每个条目,最终结果都会被替换2个小时。我希望你明白我的意思。 – C4u

0

的问题来自:

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

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

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

或者使用DateTime作为@Ben Beri建议你照原样做(我认为)最好的方法。

+0

不好备份我的东西,并编辑我的代码到DateTime。谢谢。 – C4u