Omar Ramírez aka Rigter

Restar 7 dias a una fecha con PHP

Por cuestiones del trabajo, me di a la tarea de desarrollar una funcion la cual restara 7 dias a una fecha dada, esto para unirlo con otro script que genera archivos .vcs y agendar eventos dentro de Outlook.

Bien, pues la logica en un principio no fue tan sencilla, la elaboracion de este script fue de prueba y error, pero finalmente lo logre.

Quizas no es la mejor y mas sencilla manera de lograr esta tarea, pero finalmente es funcional y me parece que puede ser muy util para quienes comienzan en PHP, ya que con el uso de condiciones (if, else, switch) logre el funcionamiento del script.

Aqui el codigo comentado (que no es mucho), por cualquier cosa no duden en dejar un comentario.


<?php
function sevendays($anio,$mes,$dia){
    
    
// Si el dia es menor o igual a 7
    
if($dia<=07){
        if(
$mes==01){ // si mes es 01 (Enero)...
        
$mes 12// Convertimos el mes a 12 para evitar el problema de que nos de 0
        
$anio $anio-0001;     // Restamos uno al año actual
        
}else{
        
$mes $mes-01;  // Restamos uno al mes actual 
        
}
        
        if(
$mes<=9){
            
$mes "0".$mes;  // Solo para poner un 0 antes del numero menor o igual a 9
        
}
        
    }

    
// Dias para cada mes
    
switch($mes){
        case 
01:  // Enero
        
$dias 31;
        break;
        
        case 
02:  // Febrero
        
$dias 28;
        break;
        
        case 
03:  // Marzo
        
$dias 31;
        break;
        
        case 
04:  // Abril
        
$dias 30;
        break;
        
        case 
05:  // Mayo
        
$dias 31;
        break;
        
        case 
06:  // Junio
        
$dias 30;
        break;
        
        case 
07:  // Julio
        
$dias 31;
        break;
        
        case 
08:  //Agosto
        
$dias 31;
        break;
        
        case 
09:  // Septiembre
        
$dias 30;
        break;
        
        case 
10:   // Octubre
        
$dias 31;
        break;
        
        case 
11:  // Noviembre
        
$dias 30;
        break;
        
        case 
12:  // Diciembre
        
$dias 31;
        break;
    }
    
    
    
// Logica de las restas para los primeros 7 dias de cada mes
    
    
switch($dia){
        
        case 
01:
        
$dia $dias-06;
        break;
        
        case 
02:
        
$dia $dias-05;
        break;
        
        case 
03:
        
$dia $dias-04;
        break;
        
        case 
04:
        
$dia $dias-03;
        break;
        
        case 
05:
        
$dia $dias-02;
        break;
        
        case 
06:
        
$dia $dias-01;
        break;
        
        case 
07:
        
$dia $dias;
        break;
        
        default; 
// Por defecto hacemos restas de 7
        
$dia $dia-07;
        break;
        
    }

    
$fecha_final $anio.$mes.$dia// Unimos las variables
    
    
return $fecha_final;  // Regresamos la fecha con 7 dias menos =)
    
}
?>



Actualizado 30.12.2008


Una vez mas investigando sobre el tema de fechas para otro proyecto que tengo asignado, encontre una manera mucho mas facil y con menos codigo para lograr la resta de 7 dias (pueden ser mas, menos o hasta meses), pero en este caso la suma o resta se hace a la fecha actual.


<?php

echo date("Y-m-d",strtotime("-7 days")); // Restamos 7 dias

echo date("Y-m-d",strtotime("+7 days")); // Sumamos 7 dias

echo date("Y-m-d",strtotime("+3 months")); // Sumamos 3 meses

// puede usarse el formato que se requiera Y-m-d, d-m-Y, etc...

?>


Fuente: http://php.net/date

Y eso es todo, los 2 codigos son funcionales, el mio creo que podria explicar la logica de lo que date("Y-m-d",strtotime("-7 days")) hace internamente.

Saludos!

Comentarios

  • vlad
    (2009-10-21 11:13:18)
    listo!! encontre una forma mas eficiente, creo:
    $fecha = date("Y-m-d", $f);
    $a = explode("-", $fecha);
    $fecha = date("Y-m-d", mktime(0, 0, 0, $a[1]-1, (01), $a[0]));

    en donde $f se obtuvo con mktime(), y estamos restando un mes a la fecha, igual podria ser dias.

    saludos.
  • vlad
    (2009-10-21 10:36:46)
    echo date( "Y-m-d", strtotime( "2009-01-31 +1 months" ) )."";

  • vlad
    (2009-10-21 10:35:10)
    esta muy bien pero en la documentacion de php encontre un bug:
    http://www.php.net/manual/en/function.strtotime.php
    lot of people said that there is bug in strtotime method like given in this example:



    this gives 03-03-2009 instead of 28-02-2009

    here is work arround for this bug.
    [...]

    No he confirmado este bug pero si esta ahi es por algo :)
    saludos
  • Darcon
    (2009-01-19 16:23:42)
    Muchas Gracias, necesitaba esto :)
  • Kakalake
    (2008-12-31 12:34:34)
    Jajajaja tambien siempre ocupo soluciones un poco más largas pero más funcionales hace días me enfrente con una cosilla parecida pero con horas y no sabía como hacerle ahora con esto ya me dí una idea
  • Rigter
    (2008-12-29 23:27:28)
    En las circunstancias que tenia yo no era posible, esto por que la fecha provenia de un flash y en esta ocasion no almaceno datos, solo junto lo que recibo para generar el archivo .vcs
  • Alexander
    (2008-12-29 16:02:35)
    Ke tal Rigter solo como comentario y sugerencia no hubiera sido mas facil usar una sentencia SQL y usar la funcion dateadd para restar los 7 dias. Saludos

Agrega tus comentarios

Extras

Categorías