PHP实现YYYYMM-序号格式日志计数器的技术求助
解决PHP计数器格式化为YYYYMM-序号的问题
咱们先聊聊你之前修改代码时踩的坑:你用intval($date)把date('mY-')转成整数,可这个日期字符串里的横杠会被忽略,转成int后就只剩数字部分(比如052024-会变成52024),再累加自然就得到了奇怪的数字,完全不是想要的格式。
要实现YYYYMM-序号的计数逻辑,核心是要按月份区分计数:同一个月份里序号递增,切换到新月份后序号重置为1。下面是完整的实现代码,我给你加了详细注释:
<?php $file = 'counter.txt'; // 获取当前年月,格式为YYYYMM(比如202405) $currentYearMonth = date('Ym'); // 初始化序号为1 $sequence = 1; if (file_exists($file)) { // 读取文件里的内容 $savedContent = file_get_contents($file); // 按横杠分割,拆分出存储的年月和序号 list($savedYearMonth, $savedSequence) = explode('-', $savedContent); // 如果存储的年月和当前年月一致,序号加1 if ($savedYearMonth === $currentYearMonth) { $sequence = intval($savedSequence) + 1; } // 如果年月不一致,序号保持1(自动重置) } // 拼接成目标格式:YYYYMM-序号 $newCounter = $currentYearMonth . '-' . $sequence; // 写入文件 file_put_contents($file, $newCounter); // 可以输出看看结果(可选) echo $newCounter; ?>
代码逻辑说明:
- 首先获取当前的年月字符串(
Ym格式正好是YYYYMM) - 读取计数器文件后,用
explode('-', ...)拆分出之前存储的年月和序号 - 对比当前年月和存储的年月:一致就把序号加1,不一致就重置为1
- 最后拼接成要求的格式写入文件
测试一下效果:
- 第一次运行:
counter.txt里会写入202405-1 - 同一个月份内多次运行:序号依次变成
202405-2、202405-3... - 到了6月份第一次运行:自动重置为
202406-1
内容的提问来源于stack exchange,提问作者Cody Coderson
相关产品推荐
相关产品推荐

