V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Steps
V2EX  ›  问与答

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

  •  
  •   Steps · 2019-01-27 00:14:04 +08:00 · 1253 次点击
    这是一个创建于 1922 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在网上查资料查到了每小时的生成方法,如下: 但是我把 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 条回复    2019-01-27 12:32:55 +08:00
    jugelizi
        1
    jugelizi  
       2019-01-27 00:36:21 +08:00   ❤️ 1
    $start 取错了
    allenhu
        2
    allenhu  
       2019-01-27 00:37:29 +08:00 via Android
    脑子真是个好东西
    Steps
        3
    Steps  
    OP
       2019-01-27 00:42:21 +08:00
    Steps
        4
    Steps  
    OP
       2019-01-27 00:45:26 +08:00
    我是这样想的,
    24 小时的就显示出 48 组数据,每组 半小时,
    7 天的就显示 42 组,每组 6 小时,
    30 天就显示 30 组,每组一天为时段。

    我该如何去操作?
    boks
        5
    boks  
       2019-01-27 00:49:46 +08:00   ❤️ 1
    $now = time();
    $start = strtotime('-1 days');
    $start -= ($start % 1800);
    ...
    Steps
        6
    Steps  
    OP
       2019-01-27 00:51:07 +08:00
    @boks #5 谢谢!
    Steps
        7
    Steps  
    OP
       2019-01-27 00:54:56 +08:00
    @boks #5 可以半小时生成一次了,如果按照我上面说的操作,我该怎么操作?
    boks
        8
    boks  
       2019-01-27 01:13:51 +08:00   ❤️ 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  
       2019-01-27 01:16:00 +08:00 via iPhone   ❤️ 1
    2 楼专业喷子吗
    xiaotuzi
        10
    xiaotuzi  
       2019-01-27 01:17:25 +08:00 via iPhone   ❤️ 1
    随时间每 30 分钟执行一次统计就行了。你这个写的是查询历史数据统计…当然是轮询写 SQL 查询得结果了…
    Steps
        11
    Steps  
    OP
       2019-01-27 01:57:32 +08:00
    @boks #8 非常感谢你的帮助!
    Steps
        12
    Steps  
    OP
       2019-01-27 02:10:32 +08:00
    @boks #8 再问一下,我的 sql 应该 怎么写 日期来查询?
    ```
    SELECT * FROM `logs` WHERE time > '2019-01-26 01:00' AND time < '2019-01-26 01:30';
    ```

    查询这里日期 我不晓得该怎么去写。。。
    KasuganoSoras
        13
    KasuganoSoras  
       2019-01-27 04:31:41 +08:00
    https://github.com/kasuganosoras/SomeCodes/blob/master/v2ex_530931.php

    善于思考
    另外你完全可以用 while(true) 配合 sleep 实现每 30 分钟查询一次 SQL,没必要这样
    Steps
        14
    Steps  
    OP
       2019-01-27 11:09:09 +08:00
    @KasuganoSoras #12 可是我的日志在数据库里啊,
    Steps
        15
    Steps  
    OP
       2019-01-27 11:58:20 +08:00
    @KasuganoSoras #12 7 楼 的代码已经帮我解决大部分的问题了,只是 查询语句 开始日期和结束日期 还不能写对。
    Steps
        16
    Steps  
    OP
       2019-01-27 12:32:55 +08:00
    @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] ) );
    ```

    已经解决了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   816 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:13 · PVG 04:13 · LAX 13:13 · JFK 16:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.