【问题标题】:Time To Percent Using PHP使用 PHP 的时间百分比
【发布时间】:2015-10-31 08:54:06
【问题描述】:

这听起来像是一个愚蠢的问题,但是如何将两个日期之间的时间转换为百分比?

我正在使用这个 Jquery 插件:http://tinacious.github.io/goalProgress/

页面上计算百分比的脚本是:

$('#timerGoal').goalProgress({
                    goalAmount: 100,
                    currentAmount: 40,
                    textBefore: '',
                    textAfter: '% Completed.'
                });

上面写着goalAmount: 我希望它保持在100,但是上面写着currentAmount: 40, 我想以某种方式找到两天之间的百分比差异,我知道我必须设置开始日期、当前日期和结束日期以查找百分比。

我确定部分代码必须是:

$startDate = '01/01/2015 12:00:00';
$currentDate = date('d/M/Y H:i:s');
$endDate = '02/15/2015 12:00:00';

找出两个日期之间的差异相当容易,但这是我无法掌握的第三个日期,尤其是要使其成为百分比。

有什么想法吗?

我的想法是这样的:

[取自:How to find the difference in days between two dates]

$daylen = 60*60*24;

   $date1 = '2010-03-29';
   $date2 = '2009-07-16';

   echo (strtotime($date1)-strtotime($date2))/$daylen;

但我读到的都是两个日期而不是三个日期。

这是我想出的。 它还没有计算百分比,但它可能会出错:

$startDate = '08/01/2015 12:00:00';
$currentDate = date('d/M/Y H:i:s');
$endDate = '09/01/2015 12:00:00';

$startDate =str_replace(array(':', '/', ' '), '', $startDate);
$currentDate =str_replace(array(':', '/', ' '), '', $currentDate);
$endDate =str_replace(array(':', '/', ''), ' ', $endDate);

$mainPercent = $endDate - $startDate;

$actualPercent = $endDate - $currentDate;

$displayPercent =  $actualPercent/$mainPercent * 100;

echo $displayPercent;

今天的日期是08/07/2015,我得到的是901.2015119993,这显然不是一个百分比,但它是一个开始。

工作解决方案:

$startDate = strtotime('08/01/2015 12:00:00');
$currentDate = time(date('d/M/Y H:i:s'));
$endDate = strtotime('09/15/2015 12:00:00');

$dateDivideBy = $endDate - $startDate;
$dateDivide = $currentDate - $startDate;

$divideProduct = $dateDivide / $dateDivideBy;

$datePercent = round($divideProduct * 100);

echo $datePercent;

使用此工作代码和今天的日期为08/07/2015$datePercent 的值为14

【问题讨论】:

  • date('01/01/2015...') 的意义何在?这些都不是格式化字符,所以你最好只有$start = '01/01/...',如果你想找到时间字符串之间的差异,你应该把strtotime()它们转换成整数,你可以在上面做数学运算。

标签: php jquery date


【解决方案1】:

两次之间的差异,就其本身而言,确实无法转换为百分比。这只是一段时间。为了弄清楚完成的百分比,您需要知道整个目标应该花费多长时间(我假设是估计时间。)然后您可以像这样算出百分比:

ElapsedTime / TotalTime * 100

总时间为End Date - Start Date,经过时间为now - start date

与其使用字符串函数来操作日期,不如使用 DateTime 函数。

$startDate = '08/01/2015 12:00:00';
$endDate = '09/01/2015 12:00:00';

$startDate = new DateTime($startDate);
$currentDate = new DateTime(); // defaults to now
$endDate = new DateTime($endDate);

$totalTime = $endDate->diff($startDate)->format('%a');
$elapsedTime = $currentDate->diff($startDate)->format('%a');
// diff returns a DateInterval object; calling its format method 
// with %a returns the number of days in the interval

$percent = ($elapsedTime / $totalTime) * 100;

【讨论】:

  • 这就是为什么我使用 3 次来考虑百分比。我的想法是确定的开始时间和结束时间为 100%,然后当前到结束时间的时间为另一个百分比。我要做一些实验,看看我能想出什么。
  • 看起来我们现在的想法是一样的 :) 一开始我很困惑,但我想我可以解决这个问题。谢谢你让我的大脑开始思考。我会留下这个,所以当我找到解决方案时,我可以为任何可能的未来访问发布答案。
  • 谢谢。这是我认为可以使用但想不出该怎么做的东西。假设我有日期01/01/2015 12:00:00 如何将其转换为01012015120000 之类的数字?如果我可以将所有日期都转换为数字,我想我可以想出一个不错的代码。
  • JavaScript Date 对象只是毫秒的表示,您可以根据需要添加和减去它们而无需转换它们。
  • 我已经在我的问题中发布了我迄今为止编写的代码。我还没有得到百分比,但这是一个开始。有什么建议吗?
【解决方案2】:

我相信这是您想要的结果,其中resultstart_actual_timepercent_time 之间产生的百分比差异:

var percent_time= new Date("01/17/2013 11:20");
var start_actual_time = new Date("01/17/2012 11:20");
var end_actual_time = new Date("01/17/2014 11:20");


var range = end_actual_time - start_actual_time;
var diff = end_actual_time - percent_time;

var result = (diff / range)*100;

在本例中,start_actual_timepercent_time 相差 40%。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多