Con respecto a poner return parent::afterFind() o parent::beforeSave() si. Es necesario poner el return porque la primera en ser llamada es tu afterFind() la que a su vez llama a parent::afterFind(). Si en tu afterFind() no retornas el valor de parent::afterFind() este queda "olvidado" en tu afterFind(). Espero haberme explicado bien, pero ya tenes una idea.
Particularmente trabajo con el tipo Date de MySQL (o Datetime si necesito tambien las horas, minutos y segundos)
Y cuando hay que filtrar por fechas etc… dejo que el motor de la base de datos haga las comparaciones. En php solo muestro (o capturo la entrada del usuario) para las fechas, pero trato lo mayor posible de evitar comparaciones de fechas y horas en php. En el peor de los casos (en el que tenga que validar alguna fecha que es mayor que otra etc… uso las funciones incorporadas de php (las funciones de fecha que tiene php5)
para hacer comparaciones de fecha estoy usando algo como
//b_fecha es criterio de busqueda ingresado por el usuario
//en las busquedas el usuario puede ingresar
// "%/06/2009" fechas de junio/2009
//"%/%/2009" fechas del año 2009
// "%/10/%" fechas de octubre
if (isset($_GET['b_fecha']) and $_GET['b_fecha']!="") {
$conditions[] = 'date_FORMAT( fecha,\'%d/%m/%Y\' ) like :fecha';
$params[':fecha'] = '%'.$_GET['b_fecha'].'%';
$criterios['b_fecha']=$_GET['b_fecha'];
}
igualmente mi pregunta estaba orientada a como mostrar / validar / almacenar las fechas
en mysql se almacenan como año-mes-dia
y al usuario se le muestra dia-mes-año
y para ingreso o modificacion, el usuario ingresa dia-mes-año
y se almacena año-mes-dia
uds hacen algo parecido a lo que hago yo?
(el codigo esta en este post y es el codigo de la extension http://www.yiiframew…etime-behavior/)
gracias por responder y compartir
soy nuevo en esto y quiero encontrar la mejor forma de hacer las cosas, sobre todo estas que son generales a cualquier sistema
todavia estoy a tiempo de cambiar lo que ya hice(despues cuesta un poco , je je)
saludos
[edit]
este es el codigo de la clase Varios, relacionado a fechas
/*
* me devuelve la fecha con "/" como separador
*/
public static function agregarBarras($date_in) {
$date_out=$date_in;
$date_aux = str_replace(array('\'', '-', '.', ','), '/', $date_in);
$date_arr = explode('/', $date_aux);
if(count($date_arr) == 1 and strlen($date_arr[0])== <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' /> // No tokens
{
$date_out=substr($date_arr[0], 0, 2).'/'.substr($date_arr[0], 2, 2).'/'.substr($date_arr[0], 4, 4);
}
elseif(count($date_arr) == 1 and strlen($date_arr[0])== 6) // No tokens
{
$date_out=substr($date_arr[0], 0, 2).'/'.substr($date_arr[0], 2, 2).'/'.substr($date_arr[0], 4, 2);
}
return $date_out;
}
public static function is_date($date)
{
try {
$date = str_replace(array('\'', '-', '.', ','), '/', $date);
$date = explode('/', $date);
//no es lo mejor, pero para el 2100 espero estar jubilado
if (count($date) == 3 and $date[2]==0) $date[2]=2000;
if( count($date) == 3
and is_numeric($date[0])
and is_numeric($date[1])
and is_numeric($date[2])
and checkdate($date[1], $date[0], $date[2])
//( checkdate($date[0], $date[1], $date[2]) //mmddyyyy
//or checkdate($date[1], $date[0], $date[2]) //ddmmyyyy
//or checkdate($date[1], $date[2], $date[0]))//yyyymmdd
)
{
return true;
}
if (count($date) == 1 and strlen($date[0])== 6 and substr($date[0], 4, 2)==0)
//no es lo mejor, pero para el 2100 espero estar jubilado
$date[0]=substr($date[0], 0, 4).'2000';
if( count($date) == 1 // No tokens 10022006
and is_numeric($date[0])
and strlen($date[0])== 8 and
( checkdate(substr($date[0], 2, 2)
, substr($date[0], 0, 2)
, substr($date[0], 4, 4)))
)
{
return true;
}
if( count($date) == 1 // No tokens 100206
and is_numeric($date[0])
and strlen($date[0])== 6 and
( checkdate(substr($date[0], 2, 2)
, substr($date[0], 0, 2)
, substr($date[0], 4, 2)))
)
{
return true;
}
return false;
}
catch(Exception $e) {return false;};
}
public function dateconvert($date,$func) {
// valores nulos
if ($date =='00-00-0000' or $date =='00/00/0000' or $date =='0000-00-00' or $date =='0000/00/00' or $date ==null) return null;
if ($func == 1){ //insert conversion
list($day, $month, $year) = split('[/.-]', $date);
//si ingresa 10/8/9, pongo 10/08/09, sino me pone 0009 en vez de 2009
if (strlen($year)==1) $year='0'.$year;
$date = "$year-$month-$day";
return $date;
}
if ($func == 2){ //output conversion
list($year, $month, $day) = split('[-.]', $date);
$date = "$day/$month/$year";
return $date;
}
}
yyyy’,‘message’ => ‘¡{attribute} no es una fecha válida!’,),
Y además, en mi vista, tengo definido:
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'name' => 'FCUserProfile[DateOfBirth]',
// additional javascript options for the date