PoL, on 06 January 2010 - 08:08 AM, said:
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)
coincido en eso
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])== 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;
}
}
This post has been edited by Horacio Segura: 06 January 2010 - 09:07 AM