首页 > 解决方案 > 通过增加时间来增加进度条

问题描述

大家,我有这个项目,我正在为一个客户构建这个项目,该客户需要一种类似进度条指示器来显示用户订阅计划何时到期,例如用户在X天注册,并且计划应该在下一个结束7 天后(用户试用将在其中完成)。

这是我正在使用的逻辑,但它似乎不起作用,任何更好的理想或绕过它的方法都会更好。

用户注册日期返回 2018-09-11 16:32:08.000000 - (LARAVEL CARBON) 保存在数据库中

然后我使用以下代码添加 7 天 Carbon::createFromFormat('Ymd H:i:s', 2018-09-11 16:32:08.000000;

用户跟踪到期日期结束于 2018 年 9 月 18 日 16:32:08.000000 - 未保存在数据库中。

在我看来,我有这个包含引导进度指示器的 div。

<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 20%">
<span class="sr-only">20%Complete (danger)</span>
</div>

再次问题是,我如何循环或在经过的每一天之间切换案例以至少指示进度,例如,如果日期比前一天添加使变量返回 20% - 我可以将其放在进度 div

标签: phplaravellaravel-5

解决方案


我不使用 Laravel,但我会说这样的话

$Carbon = New Carbon($row['subscribe_date']); //not sure how you do this
//expire 7 days after original date
$Carbon ->modify('+7 days'); 
$expire = $Carbon->getTimestamp();

$percent = round(($expire / time())*100);

if($percent <= 0) //expired

我可能在数学上是错的,因为我只是在想办法。

你可能需要做这样的事情,这取决于你想要“剩余时间”还是“经过的时间”

$percent = round(100-($expire / time())*100));
if($percent > 100) //expired

以这两个 Unix 时间戳为例:

// 2018-9-9 / 2018-9-16 = 99.99 something.
// and maybe you want the something, the 00.01 bit.
 1536451200 / 1537056000   

我看过 Carbon,它只是 DateTime 的扩展,这样它就可以精确到秒。

然后当然你需要将它作为 JSON 返回,我相信有一些很酷的 Laravel 方法可以做到这一点。

如果您想要天数,则可以将两者相减并除以一天中的秒数。

   $seconds = time() - $Carbon->getTimestamp();
   if($seconds > 0 )
       $days = floor($seconds / (60*60*24));  //60 seconds * 60 minutes * 24 hours
   else
       $days = 0;

如果您不喜欢,您可以随时为时间戳执行此操作time

    (new Carbon)->getTimestamp();

这只是简单的算术。

干杯!


推荐阅读