时间戳之间增加或减少的百分比


Percentage Increase or Decrease Between timestamps

这应该是更容易解决或谷歌的答案,但我就是做不好。也许我只是卡住了:

这是我尝试过的:

$now = time();
// i.e Improve police arriving time from 15 mins to 10 mins
$array_ini = explode(':',$ini_value); // "00:15:00" in my example (15 mins)
$array_desired = explode(':',$desired_value); // "00:10:00" in my example
$ini = $now-mktime($array_ini[0],$array_ini[1],$array_ini[2]);
$des = $now-mktime($array_desired[0],$array_desired[1],$array_desired[2]);
$percent = (1-$ini/$des)*100;

但是我得到的是。47%的改进,而我的逻辑说它实际上是33%的改进。我做错了什么?

用分钟来表示要容易得多:

$ini_mins = 15;
$desired_mins = 10;
$improvement_mins = $ini_mins - $desired_mins;
$percent = ($improvement_mins / $ini_mins) * 100;
print_r($percent);

就像Ryan在他的回答中说的那样,用分钟来处理确实很直接,也更容易。

但是要补充的是,你做错了什么-你正在从unix时间15 Sep 2015 19:00:00中扣除unix时间1970年1月1日00:10:00和1970年1月1日00:15:00。当然,这两个数字之间的百分比差异很小。你在做这样的事情

num1 = 100000 - 10
num2 = 100000 - 15

percentage num1/num2 is wrong方法查找10和15之间的百分比差异;而且会比33%小得多

加上你有一个代码错误。该数组名为$array_desired,但在mktime中引用$array_des。

好的。我想是阿米特打开了我的思路。根据他的评论,我贴出了正确的答案:

// This line is not needed any more
//$now = time();
// i.e Improve police arriving time from 15 mins to 10 mins
$array_ini = explode(':',$ini_value); // "00:15:00" in my example (15 mins)
$array_desired = explode(':',$desired_value); // "00:10:00" in my example
// Time must to be based on Jan, 1 1970
// Hours are from 1 to 23, so must be increased by 1
$ini = mktime($array_ini[0]+1,$array_ini[1],$array_ini[2],1,1,1970);
$des = mktime($array_desired[0]+1,$array_desired[1],$array_desired[2],1,1,1970);
$percent = (1-$des/$ini)*100;