揭发一个写程序以来自己常犯的错误

作者 : admin 于 2009年01月06日, 23:05:24
2009
01-6

从来没发现这个错误,今天突然想到。

数据库中时间,我习惯使用时间戳来保存,取某天或者某小时的数据时,采用 sql 的 between and 方法。

  1. < ?php
  2. #某天的数据
  3. $time[0] = strtotime(date('Y-m-d'));
  4. $time[1] = $time[0]+86400;
  5. $sql = "SELECT * FROM TABLE WHERE TIME BETWEEN $time[0] AND $time[1]"  //伪代码
  6. ?>

乍看这样是没有什么问题的,取某天的时间段。实践证明,在数据时间的分布比较疏松的时候,的确没什么问题,但如果数据分布十分密集,每秒都有若干数据的时候,问题就出来了。根据between的规则,实际的时间就是 $time[1]-$time[0]+1 = 86401

每条语句多算了一秒……汗

解决方案,时间段的计算一律 $time[0] + 60*60*24*x -1

年前了,懒得动了

作者 : admin 于 2009年01月06日, 09:08:06
2009
01-6

每天异常疲惫,写点代码就累,累,还是累~~~~~~~~~~~~~~~~~~