lunes, 28 de septiembre de 2015

Sumar y Restar meses de una fecha con Php y MySql


Existen dos maneras de restar o sumar meses a una fecha, se debe tener en cuenta el formato de la fecha que este tenga. Una forma es usando php, es formar un código que nos reste  o nos sume un mes a la fecha que tenemos disponible usando STRTOTIME como formato de fecha. La otra manera es restarla o sumarla directamente en la consulta MySql, y aun así dentro del código php colocarle el formato de fecha a la respuesta con strtotime. 

Suma_Resta.php Solo código

#RESTA UN MESES  AUNA FECHA CON PHP
$rFecha = 20150730;
//$nuevaFecha = date('Ymd', strtotime($rFecha .'-1 month'));
$Ffecha = date ( "Ymd", strtotime (  '-1 month', strtotime( $rFecha ) ) );
echo ($Ffecha); -> 20150630

Debemos tener en cuenta que esta forma solo funciona si el mes es de 30 días ya que si es de 31 el aun así resta 30 días lo que genera un resultado erróneo de la fecha, lo mismo pasa para cuando sean meses de 28 o 29 días como febrero.

Suma_Resta.php Usando DATE_ADD en la Consulta

$sSqlFechas ="SELECT 
    DATE_ADD(fec_lim_pago, INTERVAL -1 MONTH) AS Fecha
    FROM tabla
    WHERE id ='12345' 
    ";
$resultado = mysql_query($sSqlFechas);
if (!$resultado) { //asegura que la consulta se haya ejecutado
    echo 'No se pudo ejecutar la consulta: ' . mysql_error();
    exit;
}
list($Fecha) = mysql_fetch_row($resultado); // se lista una fila del resultado
$fecha =date('Ymd', strtotime($Fecha)); //se da formato a la fecha de acuerdo a la necesidad

Realizar la resta o suma desde la consutla sql el resultado será mas exacto.
Ejemplo: Si la fecha es 2015/03/30 y le restamos un mes quedaría 2015/02/28, lo mismo pasa con los meses de 31 días si tenemos 2015/10/31 - 1 mes el resultado será 2015/09/30. Para esto necesitamos usar dentro de la consulta el DATE_ADD(date,INTERVAL expr type) o DATE_SUB(date,INTERVAL expr type).

Forma de usar DATE_ADD y DATE_SUB:

Para restar 1 mes a una fecha:
1. SELECT date_add(NOW(), INTERVAL -1 MONTH), se usa un valor negativo para restar. Si se quiere sumar un se solo se coloca el numero a sumar solo de esta manera: SELECT date_add(NOW(), INTERVAL 1 MONTH).
2. SELECT date_sub(NOW(), INTERVAL 1 MONTH). Con esta forma el resta inmediatamente un mes sin necesidad de colocar un negativo.
Otros formatos que se pueden usar son:

Formato Desc
DAY dia
MONTH mes
WEEK semana
YEAR año
HOUR horas
MINUTE minutos
SECOND segundos


1 comentario: