Magento 1.7 - 过滤网格中时间戳列的日期部分

时间:2013-01-09 08:17:23

标签: magento magento-1.7

我在网格中有以下列:

        $this->addColumn('order_date',
        array(
            'header'=> $this->__('Date'),
            'align' =>'left',
            'width' => '100px',
            'index' => 'order_date',
            'type' => 'date',
            'filter_index' => 'orders_alias.created_at'
        )
    );

示例数据如下所示:http://imageshack.us/photo/my-images/502/scr028.jpg/

在日期13 Oct 2012上过滤时,找不到任何行。这是有道理的,因为它是一个时间戳列。 http://imageshack.us/photo/my-images/29/scr029.jpg/

如何使用Magento日期从/到选择器并选择13/10/2012并显示所有行 有这个日期,不管时间部分?

1 个答案:

答案 0 :(得分:9)

这个只在您尝试将值显示为日期和数据库列时显示的错误是日期时间或时间戳。

这是因为日期更改为YYYY-MM-DD HH:MM:SS和HH:MM:SS为00:00:00,日期为from和to。日期应设置为23:59:59。

执行此操作的一种方法是更改​​app / code / core / Mage / Adminhtml / Block / Widget / Grid / Column / Filter / Date.php中的代码以支持此操作。在setValue函数中只需更改

编辑:第一个解决方案需要更改Datetime.php getValue(删除添加一天并删除一秒的代码),因为您不应更改核心代码第二个解决方案绝对是首选。

$value['to'] = $this->_convertDate($value['to'], $value['locale']);

$value['to'] = $this->_convertDate($value['to'], $value['locale'])->addDay(1)->subSecond(1);

由于这会改变所有过滤器的功能,因此更好的解决方案是更改本地代码:

$this->addColumn('order_date',
    array(
        'header'=> $this->__('Date'),
        'align' =>'left',
        'width' => '100px',
        'index' => 'order_date',
        'type' => 'datetime',
        'filter_index' => 'orders_alias.created_at',
        'frame_callback' => array( $this,'styleDate' )
    )
// ...

public function styleDate( $value,$row,$column,$isExport )
{
  $locale = Mage::app()->getLocale();
  $date = $locale->date( $value, $locale->getDateFormat(), $locale->getLocaleCode(), false )->toString( $locale->getDateFormat() ) ;
  return $date;
}

这将删除时间部分,不会显示在网格的字段中,但可以让您按照上述方式使用过滤器。