4

グリッドに次の列があります。

        $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/

13/10/2012Magento 日付 from/to セレクターを使用し、時間部分に関係なく、この日付のすべての行を選択して表示するにはどうすればよいですか?

4

1 に答える 1

9

これは、値を日付として表示しようとしているときにのみ表示されるバグであり、データベースの列は日時またはタイムスタンプです。

これは、日付がYYYY-MM-DD HH:MM:SSに変更され、HH:MM:SSが00:00:00に変更されたために発生します。日付は23:59:59に設定する必要があります。

これを行う1つの方法は、app / code / core / Mage / Adminhtml / Block / Widget / Grid / Column / Filter/Date.phpのコードを変更してこれをサポートすることです。setValue関数で変更するだけ

編集:この最初のソリューションでは、Datetime.php getValue(1日を追加して1秒を削除するコードを削除する)も変更する必要があります。コアコードを変更するべきではないため、2番目のソリューションが間違いなく推奨されます。

$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;
}

これにより、時間部分がグリッドのフィールドに表示されなくなりますが、上記の方法でフィルターを使用できるようになります。

于 2013-01-09T16:00:50.220 に答える