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!