php - 选择时间与未来日期相同的数据

oli*_*rbj 3 php mysql time pdo unix-timestamp

我在我的数据库中有一个表users_added,在该表中,我有一个字段expire,它存储一个unix时间戳.

我的问题是,如何循环x天,并查看用户已离开的天数(直到满足过期日期)

例:

    1 day remaining:
    10 users

    2 days remaining: 
    0 users

    3 days remaining 
    50 users
Run Code Online (Sandbox Code Playgroud)

等等..

图形示例:

在此输入图像描述

这是我到目前为止:

    // Start date
    $date = date("Y-m-d",$time);
    // End date
    $end_date = date('Y-m-d', strtotime($date . " +10 days"));



    while (strtotime($date) <= strtotime($end_date)){


        $stmt = $dbh->prepare("SELECT * FROM users_added WHERE user_by=:user AND expire<:time");
        $stmt->bindParam(":user",$userdata['username']);
        $stmt->bindParam(":time",$end_date);
        $stmt->execute();
        $expireData = $stmt->fetchAll();
        $remaining = $date-$end_date;
        echo "$remaining";
        echo "day(s) remaining:";

        $date = date ("Y-m-d", strtotime("+1 day", strtotime($date)));
    }
Run Code Online (Sandbox Code Playgroud)

我无法离开这里,因为我被困住了.我不知道如何实现这一目标.

mik*_*n32 7

这对我有用:

mysql> CREATE TABLE users (expiry INT UNSIGNED);
Query OK, 0 rows affected (0.12 sec)

mysql> INSERT INTO users (expiry) VALUES
        (UNIX_TIMESTAMP() + 1000),
        (UNIX_TIMESTAMP() + 12348),
        (UNIX_TIMESTAMP() + 89284),
        (UNIX_TIMESTAMP() + 99438),
        (UNIX_TIMESTAMP() + 333552),
        (UNIX_TIMESTAMP() + 883718),
        (UNIX_TIMESTAMP() + 994872);
Query OK, 7 rows affected (0.05 sec)
Records: 7  Duplicates: 0  Warnings: 0

mysql> SELECT
        ROUND((expiry - UNIX_TIMESTAMP()) / 86400) AS days,
        COUNT(*) AS cnt
       FROM users
       WHERE expiry > UNIX_TIMESTAMP()
       GROUP BY days;
+------+-----+
| days | cnt |
+------+-----+
|    0 |   2 |
|    1 |   2 |
|    4 |   1 |
|   10 |   1 |
|   12 |   1 |
+------+-----+
5 rows in set (0.00 sec)

mysql> 
Run Code Online (Sandbox Code Playgroud)

让数据库完成工作; 从当前时间戳中减去到期时间戳,可以获得到期前的秒数,并将其除以86400,得出天数.然后,您可以按天数对结果进行分组,以获得每天的计数.