PHP公式,以递增的点值分配天数,以30的值范围分隔


PHP formula to assign days incrementally increasing point values, separated by value ranges of 30

我使用一个PHP变量来计算从今天到创建条目的天数:

DATEDIFF(NOW(), l.created)

我怎么能写一个PHP方程,其中该值的前30天乘以每个1分,然后30-60天乘以每个2分,然后60-90天乘以每个3分,以此类推,直到自创建以来的总天数,然后所有的积分相加。

所以如果某样东西只被创造了15天,那么它就会得到15分。但如果某样东西已经创作了45天,它就会得到60分(30 * 1 + 15 * 2)。

算法:

$d = <number of days>;
$m = intval($d / 30);  // completed months
$r = intval($d % 30);  // remaining days beyond that
$score = ($m * ($m + 1) / 2) * 30 + ($m + 1) * $r;
//       ^^^^^^^^^^^^^^^^^^^        ^^^^^^^^
//       accumulated levels        final lvl.

例子:对于$d = 45,我们有$m = 1$r = 15,得到30 + 2*15 = 60


这是一个独立的SQL公式,但你必须自己用子查询或连接或其他东西把它连接到你的函数:

SELECT TRUNCATE((TRUNCATE(d/30, 0) * (TRUNCATE(d/30, 0) + 1) / 2) * 30 + (TRUNCATE(d/30, 0) + 1) * (d % 30), 0) AS score
FROM (SELECT 45 AS d) AS t;   
for ($i = 0; $i < $number; $i++) $points += ceil($i / 30);
<?
$day_num = 90;
$points = 0;
for($i=1;i<=$day_num;$i++)
{
    $points += ceil($i/30);
}
echo $points;
?>