V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Steps
V2EX  ›  问与答

又来 咨询问题了, PHP 相关,日志查询 统计每 30 分钟的数据量。

  •  
  •   Steps · Jan 27, 2019 · 1844 views
    This topic created in 2650 days ago, the information mentioned may be changed or developed.

    在网上查资料查到了每小时的生成方法,如下: 但是我把 3600 改成了 1800 如果写 i+= 1800; 格式 就只能查到当前的分, 我需要的是 00:00 00:30 01:00 01:30 ... 这样的格式,我现在只能做到 00:02 00:32 ...

    这样。。 求教。 代码如下

    $now = time();
    $start = strtotime('-1 days');
    for ($i=$start; $i<=$now; $i+=1800) {
        $start_date = date('Y-m-d H', $i);
        $end_date = date('Y-m-d H', $i);
        $mdate = date('H:i', $i);
        $data[$mdate] = 数据查询;
    }
    

    得到的 $mdate 是我上面说的格式。。

    我所需要的是整点 和 30 分钟的,我该如何去写?

    16 replies    2019-01-27 12:32:55 +08:00
    jugelizi
        1
    jugelizi  
       Jan 27, 2019   ❤️ 1
    $start 取错了
    allenhu
        2
    allenhu  
       Jan 27, 2019 via Android
    脑子真是个好东西
    Steps
        3
    Steps  
    OP
       Jan 27, 2019
    Steps
        4
    Steps  
    OP
       Jan 27, 2019
    我是这样想的,
    24 小时的就显示出 48 组数据,每组 半小时,
    7 天的就显示 42 组,每组 6 小时,
    30 天就显示 30 组,每组一天为时段。

    我该如何去操作?
    boks
        5
    boks  
       Jan 27, 2019   ❤️ 1
    $now = time();
    $start = strtotime('-1 days');
    $start -= ($start % 1800);
    ...
    Steps
        6
    Steps  
    OP
       Jan 27, 2019
    @boks #5 谢谢!
    Steps
        7
    Steps  
    OP
       Jan 27, 2019
    @boks #5 可以半小时生成一次了,如果按照我上面说的操作,我该怎么操作?
    boks
        8
    boks  
       Jan 27, 2019   ❤️ 1
    $now = time();
    $Range = '30';
    $map = [
    '1' => 1800,
    '7' => 3600 * 6,
    '30' => 3600 * 24,
    ];
    $start = strtotime("-{$Range} days");
    $start -= $start % $map[$Range];
    for ($i=$start; $i<=$now; $i+=$map[$Range]) {
    $start_date = date('Y-m-d H', $i);
    $end_date = date('Y-m-d H', $i);
    $mdate = date('Y-m-d H:i', $i);
    $data[$mdate] = '数据查询';
    }
    var_dump($data);
    SwordImmortal
        9
    SwordImmortal  
       Jan 27, 2019 via iPhone   ❤️ 1
    2 楼专业喷子吗
    xiaotuzi
        10
    xiaotuzi  
       Jan 27, 2019 via iPhone   ❤️ 1
    随时间每 30 分钟执行一次统计就行了。你这个写的是查询历史数据统计…当然是轮询写 SQL 查询得结果了…
    Steps
        11
    Steps  
    OP
       Jan 27, 2019
    @boks #8 非常感谢你的帮助!
    Steps
        12
    Steps  
    OP
       Jan 27, 2019
    @boks #8 再问一下,我的 sql 应该 怎么写 日期来查询?
    ```
    SELECT * FROM `logs` WHERE time > '2019-01-26 01:00' AND time < '2019-01-26 01:30';
    ```

    查询这里日期 我不晓得该怎么去写。。。
    KasuganoSoras
        13
    KasuganoSoras  
       Jan 27, 2019
    https://github.com/kasuganosoras/SomeCodes/blob/master/v2ex_530931.php

    善于思考
    另外你完全可以用 while(true) 配合 sleep 实现每 30 分钟查询一次 SQL,没必要这样
    Steps
        14
    Steps  
    OP
       Jan 27, 2019
    @KasuganoSoras #12 可是我的日志在数据库里啊,
    Steps
        15
    Steps  
    OP
       Jan 27, 2019
    @KasuganoSoras #12 7 楼 的代码已经帮我解决大部分的问题了,只是 查询语句 开始日期和结束日期 还不能写对。
    Steps
        16
    Steps  
    OP
       Jan 27, 2019
    @boks #7
    @KasuganoSoras #12

    ```
    $start_date = date('Y-m-d H:i:s', $i);
    $end_date = date('Y-m-d H:i:s', $i + ( $map[$Range] ) );
    ```

    已经解决了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5480 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 03:18 · PVG 11:18 · LAX 20:18 · JFK 23:18
    ♥ Do have faith in what you're doing.