Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 计算两个日期之间的小时数_Php_Mysql_Sql - Fatal编程技术网

Php 计算两个日期之间的小时数

Php 计算两个日期之间的小时数,php,mysql,sql,Php,Mysql,Sql,我试图对工作时间做一个概述 但是,我无法让它计算sql数据库中两个日期之间的小时数,但它不会返回结果 我试图只显示两个有效的SQL条目,但计算似乎不使用SQL条目 我在页面顶部遇到此错误: Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() [<a href='datetime.--construct'>datetime.--construct</a>]: Fa

我试图对工作时间做一个概述

但是,我无法让它计算sql数据库中两个日期之间的小时数,但它不会返回结果

我试图只显示两个有效的SQL条目,但计算似乎不使用SQL条目

我在页面顶部遇到此错误:

Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() [<a href='datetime.--construct'>datetime.--construct</a>]: Failed to parse time string (31/10-2012 19:14) at position 0 (3): Unexpected character' in D:\xampp\htdocs\admin.php:46 Stack trace: #0 D:\xampp\htdocs\admin.php(46): DateTime->__construct('31/10-2012 19:1...') #1 {main} thrown in D:\xampp\htdocs\admin.php on line 46
我在这里做错了什么

我需要帮助的事情在43-52线上 这是我的密码:

<?php
$host="localhost";
$username="xxxx";
$password="xxxx";
$db_name="xxxxx";
$tbl_name="log";


mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name ORDER BY id ASC";
$result=mysql_query($sql);


?>
<title>VT Log - Oversigt</title>
<table width="90%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td width="30%" align="center" bgcolor="#E6E6E6"><strong>Navn</strong></td>
<td width="15%" align="center" bgcolor="#E6E6E6"><strong>Start</strong></td>
<td width="15%" align="center" bgcolor="#E6E6E6"><strong>Slut</strong></td>
<td width="30%" align="center" bgcolor="#E6E6E6"><strong>Kommentar</strong></td>
<td width="15%" align="center" bgcolor="#E6E6E6"><strong>Tid</strong></td>
</tr>

<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center" bgcolor="#FFFFFF"><? echo $rows['user']; ?><BR></td>
<td align="center" bgcolor="#FFFFFF"><? echo $rows['start']; ?></td>
<td align="center" bgcolor="#FFFFFF"><? echo $rows['end']; ?></td>
<td align="center" bgcolor="#FFFFFF"><? echo $rows['comment']; ?></td>
<?php
$stamp1 = $rows['start'];
$stamp2 = $rows['end'];
$date1 = new DateTime($stamp2);
$date2 = new DateTime($stamp2);
$diff = $date2->diff($date1);
$hours = $diff->h;
$hours = $hours + ($diff->d*24);
?>
<td align="center" bgcolor="#FFFFFF"><? echo $hours;?></td>
</tr>

<?php
}
mysql_close();
?>
<tr>
<td colspan="5" align="center" bgcolor="#E6E6E6"><?php echo "Total arbejdstid: " . array_sum($numbers) . "\n Timer";?></td>
</tr>
</table>
改变

$date1 = new DateTime($stamp2);  
对此

 $date1 = new DateTime($stamp1);
改变

$date1 = new DateTime($stamp2);  
对此

 $date1 = new DateTime($stamp1);

将两个日期转换为unix时间戳,然后返回以小时为单位的差值

SELECT (UNIX_TIMESTAMP(end) - UNIX_TIMESTAMP(start)) / 60.0 / 60.0 as hours_difference

之后无需进行任何PHP计算…

将两个日期转换为unix时间戳,然后返回以小时为单位的差值

SELECT (UNIX_TIMESTAMP(end) - UNIX_TIMESTAMP(start)) / 60.0 / 60.0 as hours_difference

之后不需要任何PHP计算…

问题解决了!非常感谢Ryan Griggs

将SQL查询更改为$SQL=SELECT*,UNIX_TIMESTAMPend-UNIX_TIMESTAMPstart/60.0/60.0,作为id ASC与$tbl_名称顺序的小时差

替换

<?php
$stamp1 = $rows['start'];
$stamp2 = $rows['end'];
$date1 = new DateTime($stamp2);
$date2 = new DateTime($stamp2);
$diff = $date2->diff($date1);
$hours = $diff->h;
$hours = $hours + ($diff->d*24);
?>
<td align="center" bgcolor="#FFFFFF"><? echo $hours;?></td>


问题解决了!非常感谢Ryan Griggs

将SQL查询更改为$SQL=SELECT*,UNIX_TIMESTAMPend-UNIX_TIMESTAMPstart/60.0/60.0,作为id ASC与$tbl_名称顺序的小时差

替换

<?php
$stamp1 = $rows['start'];
$stamp2 = $rows['end'];
$date1 = new DateTime($stamp2);
$date2 = new DateTime($stamp2);
$diff = $date2->diff($date1);
$hours = $diff->h;
$hours = $hours + ($diff->d*24);
?>
<td align="center" bgcolor="#FFFFFF"><? echo $hours;?></td>



有什么问题吗?什么也没回来?错误的结果?正确的结果,在错误的地方?可以让mysql为您完成工作,并使用datediff或timediff抱歉,忘记了写什么问题:我试图只显示两个有效的SQL条目,但是,计算似乎不会使用SQL Entries,这可能是由于您将$date1和$date2初始化为同一个值引起的吗?Dagon-它的意思是结束:-我在我的页面上遇到此错误:致命错误:未捕获的异常“exception”,带有消息“DateTime::\u构造[]:未能分析位置0处的时间字符串31/10-2012 19:14 3:在第46行的D:\xampp\htdocs\admin.php:46堆栈跟踪中出现意外字符:0 D:\xampp\htdocs\admin.php46:DateTime->\uu构造31/10-2012 19:1…'1{main}在D:\xampp\htdocs\admin.php中抛出,有什么问题?什么也没回来?错误的结果?正确的结果,在错误的地方?可以让mysql为您完成工作,并使用datediff或timediff抱歉,忘记了写什么问题:我试图只显示两个有效的SQL条目,但是,计算似乎不会使用SQL Entries,这可能是由于您将$date1和$date2初始化为同一个值引起的吗?Dagon-它的意思是结束:-我在我的页面上遇到此错误:致命错误:未捕获的异常“exception”,带有消息“DateTime::\u构造[]:未能在位置0处分析时间字符串31/10-2012 19:14:D:\xampp\htdocs\admin.php:46堆栈跟踪:0 D:\xampp\htdocs\admin.php46:DateTime->\uu构造'31/10-2012 19:1…'1{main}在第46行的D:\xampp\htdocs\admin.php中抛出,我的页面顶部仍有此错误:致命错误:未捕获异常“exception”,消息为“DateTime::\u构造[]:未能分析位置0处的时间字符串31/10-2012 19:14 3:D:\xampp\htdocs\admin.php:46堆栈跟踪:0 D:\xampp\htdocs\admin.php46:DateTime->\uu构造'31/10-2012 19:1…'1{main}在第46行的D:\xampp\htdocs\admin.php中抛出$date1=new DateTime$stamp1;DateTime函数似乎不喜欢日期字符串的格式。为什么datetime既有斜线又有破折号?这是您所在位置的标准格式吗?请尝试这种操作,并查看$date1=new DateTimestr_replace$stamp1,/,-;如果我只使用破折号,行吗?操作给了我这个:解析错误:语法错误,意外的“;”在第43行的D:\xampp\htdocs\admin.php中,第43行是$date1=xxxxxxxxx,我的页面顶部仍然有此错误:致命错误:未捕获异常“exception”,消息为“DateTime::\uu构造[]:未能分析位置0处的时间字符串31/10-2012 19:14 3:D:\xampp\htdocs\admin.php:46堆栈跟踪:0 D:\xampp\htdocs\admin.php46:DateTime->\uu构造'31/10-2012 19:1…'1{main}在第46行的D:\xampp\htdocs\admin.php中抛出$date1=new DateTime$stamp1;DateTime函数似乎不喜欢日期字符串的格式。为什么datetime既有斜线又有破折号?这是您所在位置的标准格式吗?请尝试这种操作,并查看$date1=new DateTimestr_replace$stamp1,/,-;如果我只使用破折号,行吗?操作给了我这个:解析错误:语法错误,意外的“;”在第43行的D:\xampp\htdocs\admin.php中,第43行是$date1=xxxxxxxxx或使用timediff,不需要转换,所以我只需要将其解析为一个新的SQL查询并使用其中的结果?如果这是您的目标,那么可以。您甚至可以将此选择用作另一个查询的一部分。i、 e从一些表格中选择*,其中completed_hours>选择UNIX_TIMESTAMPend-UNIX_TIMESTAMPstart/60.0/60.0 good point Dagon-TIMEDIFF工作-无需转换为timesta
首先是mps,然后必须将生成的日期对象转换为小时。相同的区别…:Ryan,我这样做了,现在我得到了:警告:mysql_fetch_数组期望参数1是resource,布尔值在第36行的D:\xampp\htdocs\admin.php中给出。。。。第36行:while$rows=mysql\u fetch\u array$result{或者使用timediff,不需要转换,所以我只需要将其解析为一个新的SQL查询并使用其中的结果?如果这是您的目标,那么可以。您甚至可以将此选择用作另一个查询的一部分。例如,从某个已完成的\u hours表中选择*>选择UNIX\u TIMESTAMPend-UNIX\u TIMESTAMPstart/60.0/60.0 good point Dagon-TIMEDIFF工作-无需首先转换为时间戳,但随后必须将结果日期对象转换为小时。相同的区别…:Ryan,我这样做了,现在我得到了:警告:mysql\u fetch\u数组期望参数1是资源,布尔值在第36行的D:\xampp\htdocs\admin.php中给出……第36行:while$rows=mysql\u fetch\u数组$result{