揭发一个写程序以来自己常犯的错误
作者 : admin 于 2009年01月06日, 23:05:24
2009
01-6
01-6
从来没发现这个错误,今天突然想到。
数据库中时间,我习惯使用时间戳来保存,取某天或者某小时的数据时,采用 sql 的 between and 方法。
- < ?php
- #某天的数据
- $time[0] = strtotime(date('Y-m-d'));
- $time[1] = $time[0]+86400;
- $sql = "SELECT * FROM TABLE WHERE TIME BETWEEN $time[0] AND $time[1]" //伪代码
- ?>
乍看这样是没有什么问题的,取某天的时间段。实践证明,在数据时间的分布比较疏松的时候,的确没什么问题,但如果数据分布十分密集,每秒都有若干数据的时候,问题就出来了。根据between的规则,实际的时间就是 $time[1]-$time[0]+1 = 86401
每条语句多算了一秒……汗
解决方案,时间段的计算一律 $time[0] + 60*60*24*x -1