Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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_Date_Time - Fatal编程技术网

Php 以小时和分钟为单位计算两个日期之间的差异

Php 以小时和分钟为单位计算两个日期之间的差异,php,mysql,date,time,Php,Mysql,Date,Time,我使用此代码以小时和分钟为单位计算两个日期之间的差异: $all = round(($date1timestamp - $date2timestamp) / 60); $d = floor ($all / 1440); $h = floor (($all - $d * 1440) / 60); $m = $all - ($d * 1440) - ($h * 60); 工作非常完美,但当我必须多次计算日期之间的差异时,我必须再次编写代码并更改值。有没有简单的方法可以多次计算而无需再次重写代码??

我使用此代码以小时和分钟为单位计算两个日期之间的差异:

$all = round(($date1timestamp - $date2timestamp) / 60);
$d = floor ($all / 1440);
$h = floor (($all - $d * 1440) / 60);
$m = $all - ($d * 1440) - ($h * 60);

工作非常完美,但当我必须多次计算日期之间的差异时,我必须再次编写代码并更改值。有没有简单的方法可以多次计算而无需再次重写代码??

如果我理解正确,您需要将此代码封装在函数中,然后可以在需要再次使用该函数时调用该函数,而不是重写它

function dateDiffHoursMins($date1timestamp, $date2timestamp)
{
   $all = round(($date1timestamp - $date2timestamp) / 60);
   $d = floor ($all / 1440);
   $h = floor (($all - $d * 1440) / 60);
   $m = $all - ($d * 1440) - ($h * 60);

   return array('d' => $d, 'h' => $h, 'm' => $m);
}
要使用它,只需调用
dateDiffHoursMins()
并将两个时间戳传递给它。它将返回一个数组,因此您可以获取如下值:

$diff = dateDiffHoursMins($time1, $time2);
$hours = $diff['h'];
echo("Hours: " . $hours);
将代码封装在函数中的过程通常被称为保持代码干燥,这是一个缩写,代表“不要重复自己”。这是一个你应该一直努力的目标。它使代码编写更快,调试更容易。想象一下,如果您在一个文件中复制/粘贴了该片段20次,然后在其中发现了一个bug。您必须在所有20个位置修复它,而对于函数,您只需在一个位置修复它。

尝试:

功能:

function date_difference ($date1timestamp, $date2timestamp) {
$all = round(($date1timestamp - $date2timestamp) / 60);
$d = floor ($all / 1440);
$h = floor (($all - $d * 1440) / 60);
$m = $all - ($d * 1440) - ($h * 60);
//Since you need just hours and mins
return array('hours'=>$h, 'mins'=>$m);
}
调用函数:

$result = date_difference($date1timestamp, $date2timestamp);

解决这个问题的一个好方法是以秒为单位来思考

第一步是以秒为单位提取SQL中的时间戳差异($dbc是我的数据库连接):

然后把它赋给一个变量

while ($row = mysqli_fetch_array($timeQuery)) {
    $totalTime = $row["DIFF"];
然后开始转换:

//Seconds in an hour
$unith =3600;       
//Seconds in a minute
$unitm =60;

//Number of hours and then the seconds remaining for minute calc
$hh = intval($totalTime / $unith);    
$ss_remaining = ($totalTime - ($hh * 3600));        
//Number of minutes and then the seconds remaing        
$mm = intval($ss_remaining / $unitm);    
$ss = ($ss_remaining - ($mm * 60));
然后你可以这样打印:

$hh . ' : ' . $mm . ' : ' . $ss

让它成为一个带参数的函数你能告诉我怎么做吗?我是php函数的新手。对于用户定义的函数,请参见带优秀答案的伟大问题+1。一个称之为
$difference=dateDiffHoursMins($date1timestamp,$date2timestamp)
的示例。然后,您可以访问
$difference['d']
$difference['h']
$difference['m']
是的,但我还有$date3timestamp和$date4timestamp,这意味着我每次要计算日期时都必须编写新函数??不,您只需在调用函数时传递时间戳对,例如1352215735(20121101)和135221759(20121105),将函数调用为
$result=date_difference(1352215759,1352215735)
。函数的全部目的是多次使用它,而不重复代码。
$hh . ' : ' . $mm . ' : ' . $ss