miércoles, 6 de abril de 2011

[MySQL] Restar fechas con resultado en anios, meses y dias

Les comparto una función que realmente es importante para el calculo de fechas en Mysql.



CREATE FUNCTION `CalculoAnoMesDias`( fecha_ini datetime, fecha_fin datetime ) RETURNS char(128) CHARSET utf8
BEGIN
  /**
    resta de fechas y devuelve anio, mes, dia
    formato de ingreso yyyy-m-d
    SELECT CalculoAnoMesDias( '2011-1-05',now() );
  */
  DECLARE yy,mm,d0,dd BIGINT;
  SET yy = TIMESTAMPDIFF(YEAR,fecha_ini,fecha_fin); -- anios
  SET mm = TIMESTAMPDIFF(MONTH,fecha_ini,fecha_fin) MOD 12; -- meses
  SET d0 = TIMESTAMPDIFF(DAY,fecha_ini,fecha_fin);  -- dias
 

 -- calcular los dias
  IF yy > 0 ||  mm > 0 THEN
       IF (day(fecha_fin) >= day(fecha_ini)) THEN
         SET dd = TIMESTAMPDIFF(DAY,fecha_ini,fecha_fin) - TIMESTAMPDIFF(DAY,fecha_ini,CONCAT(YEAR(fecha_fin),'-',MONTH(fecha_fin),'-',day(fecha_ini)));
        ELSE
         SET dd = TIMESTAMPDIFF(DAY,fecha_ini,fecha_fin) - TIMESTAMPDIFF(DAY,fecha_ini,CONCAT(YEAR(DATE_SUB(fecha_fin,INTERVAL 1 MONTH)),'-',MONTH(DATE_SUB(fecha_fin,INTERVAL 1 MONTH)),'-',day(fecha_ini)));
        END IF;
  ELSE
     SET dd = d0;   
  END IF;
 
  RETURN CONCAT( yy, '  año(s) ,', mm, ' meses ,', dd, ' dias ');
END;

martes, 5 de abril de 2011

[PHP] Truncar un decimal a N digitos sin redondear

Hace algún tiempo se me presentó un inconveniente a la hora de querer cortar unos resultados, pero la condición es que no se debía redondear, así que la función de php "number_format", no era la mas apropiada.

Aquí les dejo la solución final.

/**
* funcion para convertir un numero a decimal con X digitos
* @param String $number
* @param Int $digitos cantidad de digitos a mostrar
* @return Float
*/
function truncateFloat($number, $digitos)
{
    $raiz = 10;
    $multiplicador = pow ($raiz,$digitos);
    $resultado = ((int)($number * $multiplicador)) / $multiplicador;
    return number_format($resultado, $digitos);

}
 
EJEMPLO: 
truncateFloat('10.138',2);
Resultado: 10.13

domingo, 3 de abril de 2011

[Linux]Tarea programada para hacer backup de base de datos en Postgres

creamos un archivo llamado backup.sh

[Codeigniter] Jqgrid CRUD 1.1

Hace mucho publiqué en le foro de codeigniter una funcionalidad que para nosostros como desarrolladores, nos agiliza bastante el desarrollo de una aplicacion, ya que por lo general la creacion de edicion, creacion, eliminacion quita bastante tiempo.
Para esto cree esta libreria, usando jqgrid como base y Codeigniter como backend.

Haga click aqui para ver la descripción del componente,

Para descargarlo, haga click aqui

Ver demo AQUI

[Linux]Borrar y crear cola de correo de qmail

Hace poco tuve una amarga experiencia que estaba usando mi servidor, como spam de correo, al ver la cola me di cuenta que tenia mas de 10 mil correos encolados.
Lo primero que hice fué detener el servidor de correo, debido a la gran cantidad de correos, esto no lo podia borrar desde el plesk, asi que despues de mucho buscar encontré este script que me sirvió de mucho.

Para saber cuantos archivos tenemos en la cola, ejecutamos por consola el siguiente comando.

/usr/local/psa/admin/bin/mailqueuemng -s

Ahora detenemos el servicio
/etc/init.d/qmail stop

Nos movemos a la carpeta de qmail

cd /var/qmail/queue

Ahora borramos la cola

rm -rf info intd local mess remote todo

Creamos las careptas de nuevo

mkdir mess


for i in `seq 0 22`; do
mkdir mess/$i
done

cp -r mess info
cp -r mess intd
cp -r mess local
cp -r mess remote
cp -r mess todo

chmod -R 750 mess todo
chown -R qmailq:qmail mess todo


chmod -R 700 info intd local remote
chown -R qmailq:qmail intd
chown -R qmails:qmail info local remote


/etc/init.d/qmail start