偶尔在Magento v1.4.2下发现了一个bug,在后台的gird中,用时间筛选数据时,比如:筛选 01月01号-02号的是500条记录,筛选01号-01号的是270条,再筛选02号-02号的只有200条,那剩余的30条到哪里去了呢?经过检查,原来每个筛选记录的终止时间,只能定位当天的11点,这算是一个Bug吧,要解决这问题可以修改一下一行代码即可:
Mage_Adminhtml_Block_Widget_Grid_Column_Filter_Datetime 类中的首行,将
const END_OF_DAY_IN_SECONDS = 86399;
改为
const END_OF_DAY_IN_SECONDS = 86400;
即可,没错,就是相差一秒,设计者有点考虑的偏差,具体是因为时间转换为 sql 条件的时候,时间格式有误,正确的格式为 2011-07-01 23:59:59,但实际格式为 2011-07-01 23-59-59,导致了无法进行分钟的匹配。
具体的代码追踪不做详细介绍,有兴趣的朋友可以追踪以下代码:
Mage_Adminhtml_Block_Widget_Grid 类的 _prepareCollection 方法, 在末端打印
echo (string) $this->getCollection()->getSelect();
即可看到实际的sql语句。