I'm sorry to say this, but to be honest I always found the datetime filter a bit buggy and it never really worked to me (but maybe it was due to my settings in the jcook builder, not using the default values.), so I always tried to avoid to use it, now that I'm in need of it, I had to take a look on it.
By the way the datetime filter doesn't filter anything with my configuration, because the filter value is not converted to unixtime in the model list.
jcook Scenario:
- datetime filed with unixtime selected and format d-m-Y H:i:s
- filter "from date" - "to date" added in grid view
- submit on change, selected
generated component:
- UI perfectly working
- model list doesn't submit the unixtime to the DB query
bug caused by:
ROOT\administrator\components\com_mycomponent\models\myitemslist.php
//Define the filterable fields
$this->set('filter_vars', array(
'creation_date_from' => 'cmd',
'creation_date_to' => 'cmd',
'sortTable' => 'cmd',
'directionTable' => 'cmd',
'limit' => 'cmd'
));
with that code the function getUserStateFromRequest doesn't return the correct value for the datetime, so nothing can work.
fix:
//Define the filterable fields
$this->set('filter_vars', array(
'creation_date_from' => 'string', /* hack */
'creation_date_to' => 'string', /* hack */
'sortTable' => 'cmd',
'directionTable' => 'cmd',
'limit' => 'cmd'
));
then in the same file:
//WHERE - FILTER : Creation date
if($this->getState('filter.creation_date_from') !== null)
$this->addWhere("a.creation_date >= " . (int)JformsHelperDates::getUnixTimestamp($this->getState('filter.creation_date_from')));
//WHERE - FILTER : Creation date
if($this->getState('filter.creation_date_to') !== null)
$this->addWhere("a.creation_date <= " . (int)JformsHelperDates::getUnixTimestamp($this->getState('filter.creation_date_to')));
the FORMAT of the datetime is missing, so the getUnixTimestamp will return an empty value
fix:
//WHERE - FILTER : Creation date
if($this->getState('filter.creation_date_from') !== null)
$this->addWhere("a.creation_date >= " . (int)JformsHelperDates::getUnixTimestamp($this->getState('filter.creation_date_from'),array('d-m-Y H:i:s'))); /* hack */
//WHERE - FILTER : Creation date
if($this->getState('filter.creation_date_to') !== null)
$this->addWhere("a.creation_date <= " . (int)JformsHelperDates::getUnixTimestamp($this->getState('filter.creation_date_to'),array('d-m-Y H:i:s'))); /* hack */