1

我在获取/计算会议记录方面遇到了一个大问题。

设想:

我有一个表单,用户可以输入秒数 [5s, 10s, 25s, 30s, 60s]。我称表为“持续时间”

我的数据库中已经有“持续时间” [由分钟:秒组成],它是“1:5” [最后一个输入]。然后我再插入几秒钟“10s” ......

*格式为分:秒

正确的输出应该是:1: 15

当前结果是: 0: 15

如我们所见。我在计算分钟时遇到问题。我将展示的代码适用于减去秒数。但现在我需要修改它以添加秒数。

这是我的代码:

$duration = $_POST["duration"];

if(sizeof($bldg) == 1)
{
$total = sizeof($bldg)-1;
}
else
{
$total = sizeof($bldg)%2;
}

for($i=0; $i<sizeof($bldg);$i++)
{
          $result = mysql_query("SELECT fldTotalDuration FROM tbldata  WHERE  fldNetname = '".$network."' AND fldBldgName = '".$bldg[$i]."'  AND  fldWeek = '".$week."' AND fldMonth = '".$month."' ");

if(mysql_num_rows($result)==0)
{
$totalduration = "";
$seconds = 0;
$minutes = 0;

$computeSecMin = $seconds * $minutes; 
$subSecMin = $computeSecMin + $duration; 
$getMin = floor($subSecMin/60); 
$getSec = $subSecMin%60;
$totalduration = $getMin .":". $getSec; 
}
else{
$row = mysql_fetch_array($result);
$time = explode(":",$row['fldTotalDuration']);
$dur = explode(" ",$duration);

$computeSecMin = 60 * $time[0]; 
$subSecMin = $computeSecMin + $time[1] + $dur[0];
$getMin = floor($subSecMin/60); 
$getSec = $subSecMin%60; 
$totalduration = $getMin .":". $getSec; 
  }     
}

        $query = "INSERT INTO tbldata(fldNetname,fldBldgName,fldPlaylist,fldMonth,fldWeek,fldDuration,fldFrom,fldTo,fldTotalDuration) VALUES ('".$network."','".$bldg[$i]."','".$AdName."','".$month."','".$week."','".$duration."','".$from."','".$to."', '".$totalduration."')";
        mysql_query($query) or die (mysql_error()); 

$duration = 来自另一种形式,其中它是一个由 5s、10s、25s、30s、60s 组成的组合框/下拉列表。

目前,添加秒数是可以的,但分钟数不好。

我的计算问题是这个"$getMin = floor($subSecMin/60); "。结果是"0"但它应该是"1"因为这个计算是"minutes"

感谢您帮助我解决这个问题。

4

3 回答 3

0

您可能会发现使用 mysql 进行时间操作会更适合您的应用程序。AddTime() 让您只需几秒钟和几分钟即可完成您想做的事情。

选择添加时间('00:32.50','1:27.50');

给出以下结果:

01:59:01.000000

因此,这增加了 32.5 秒到 1 分 27.50 秒 = 1 分 59 秒和 0.01 毫秒。

于 2013-08-18T02:40:23.033 回答
0

Here is what you are trying to do (sorry, I changed variables names, yours were not obvious):

$time = array(1,5);
$time_plus = '10s';

$time_plus = preg_replace('#\D#', '', $time_plus);
$minutes = $time [0] + (($time_plus + $time[1] >= 60) ? 1 : 0);
$seconds = ($time[1] + $time_plus) % 60;

echo $new_time = $minutes . ":" . $seconds; 

Demo: http://codepad.org/eOBNeHrq

于 2013-08-18T02:34:50.073 回答
0

其实,你得到的就是你应该得到的。如果

$time = [0, 5] 

$dur = [10, s]

然后

$computeSecMin = 60 * $time[0] = 60*0 = 0

$subSecMin = $computeSecMin + $time[1] + $dur[0] = 0 + 5 + 10 = 15

因此

$getMin = floor($subSecMin/60) = floor(15/60) = floor(0.25) = 0

在我看来,您的计算是正确的,结果确实是 0 分钟。问题是您的持续时间变量。在我看来,您的程序得到了错误的值。如果我理解,它应该是[1, 5]而不是[0,5]。检查获取此值的函数。

于 2013-08-18T02:53:48.343 回答