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

PHP公式以递增方式分配天数的点值,以30的值范围分隔,php,Php,我使用一个PHP变量来计算从今天到创建条目的天数: DATEDIFF(NOW(), l.created) 我如何编写一个PHP公式,其中该值的前30天分别乘以1点,然后30-60天分别乘以2点,然后60-90天分别乘以3点,以此类推,直到创建后的总天数为止,然后将所有点相加 因此,如果某个东西只创建了15天,则会得到15分。但如果某个东西创建了45天,则会得到60分(30*1加15*2) 对于($i=0;$i

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

DATEDIFF(NOW(), l.created)
我如何编写一个PHP公式,其中该值的前30天分别乘以1点,然后30-60天分别乘以2点,然后60-90天分别乘以3点,以此类推,直到创建后的总天数为止,然后将所有点相加

因此,如果某个东西只创建了15天,则会得到15分。但如果某个东西创建了45天,则会得到60分(30*1加15*2)


对于($i=0;$i<$number;$i++)$points+=ceil($i/30);
算法:

$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.

算术,约翰。看到有人问这件事真令人沮丧。谢谢。。。知道如何将其转换为MySQL吗?另一个令人沮丧的问题。您自己尝试过吗?我添加了一个骨架SQL查询。
for ($i = 0; $i < $number; $i++) $points += ceil($i / 30);
$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.
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;