Estaba navegando por Cristalab cuando me encontré un aporte que explicaba cómo sumar fechas por medió de PHP, y me acorde que yo había hecho alguna vez un script con manejo de fechas, por lo cual decidí compartirlo a ustedes.
Hace algún tiempo me enfrente con la siguiente situación:
Estaba desarrollando un proyecto para un cliente en el cual existía un sistema de sesiones donde los usuarios para poder ingresar se registraban. Pero este registro debía durar solamente un año, es decir que si el usuario se registraba el 20 de Mayo de 2007, su registro solo debía ser valido hasta el 20 de mayo de 2008, es decir solo duraba una año la afiliación al sistema.
Para esa fecha estaba incursionando en PHP, por lo cual decidí intentar resolver este problema con PHP.
Después de dos o tres días de trabajo logré que a partir de la fecha que el sistema capturaba al momento del registro, determinar si ya había transcurrido un año, para así darle de baja del sistema.
Código :
<?php
/*
caducidad()
Función Calcula si ya a pasado un año para avisar que ya caduco
Autor: John Sánchez Alvarez
Este código es libre de usar y modificarse
*/
function caducidad($fecha_enviada){
if ($fecha_enviada != "0000-00-00"){
//las variable f_ son para trabajar fechas
$f_caduca = strtotime("$fecha_enviada +1 year",$fecha_enviada);
$f_caduca = date("Y-m-d",$f_caduca);
$hoy = date("Y-m-d");
print "<b>Fecha en la cual caduca:</b> ".$f_caduca . "<br>";
print "<b>Fecha de actual:</b> ".$hoy . "<br>";
$f_hoy = strtotime($hoy);
$f_hoy = floor($f_hoy/86400);
// Se divide entre 86400, ya que este es el número de segundos que posee un día
$f_caduca1 = strtotime($f_caduca);
$f_caduca1 = floor($f_caduca1/86400);
//f_compara nos sirve para determinar cuantos días faltan para que se vuelva a habilitar el envió de correo a un determinado usuario
$f_compara = ($f_caduca1-$f_hoy);
print "<b>Dias que faltan para caducar:</b> ".$f_compara . "<br>";
if ($f_compara <= 0){
//El valor de 1 nos indica que se debe actualizar la base de datos
return true;
} else {
return false;
}
} else {
return false;
}
}// Cierra la funcion fecha_caducidad
//Implementación
//Esta fecha es la fecha a la cual deseamos evaluarle su caducida
$fecha_registro = "2007-05-20";
print "<b>Fecha ingresada:</b> ".$fecha_registro."<br>";
if(caducidad($fecha_registro)){
//acá ira el código que quieres se ejecute en caso de caducar
print "<b>Estado:</b> Ya caduco";
} else {
//acá ira el código que quieres se ejecute si no ha caducado
print "<b>Estado:</b> No ha caducado";
}
?>
Código :
<?php
date_default_timezone_set("Europe/Madrid");
//--Entrada--
//$fecha => ex: 2007-08-02 16:48:26
//--Salida--
//$valores['anno'] $valores['mes'] $valores['dia']
//$valores['hora'] $valores['min'] $valores['seg']
function getValores($fecha)
{
list($fechaT, $horaT) = explode(" ",$fecha);
list($anno,$mes,$dia) = explode("-",$fechaT);
list($hora,$min,$seg) = explode(":",$horaT);
$valores=array("anno" => $anno, "mes" => $mes, "dia" => $dia, "hora" => $hora, "min" => $min, "seg" => $seg);
return $valores;
}
//------------------------------------------------------------------------------
//--Salida--
//1170889200
function getTimeUNIX($anno, $mes, $dia)
{
return mktime(0, 0, 0, $mes, $dia, $anno);
}
//------------------------------------------------------------------------------
//--Salida--
//1170949706
function getTimeUNIXall($anno, $mes, $dia, $hora, $min, $seg)
{
return mktime($hora, $min, $seg, $mes, $dia, $anno);
}
//------------------------------------------------------------------------------
//--Entrada--
//$fecha => ex: 2007-08-02 16:48:26
//--Salida--
//1170889200
function getTimeUNIX_BD($fecha)
{
$valores=getValores($fecha);
return getTimeUNIXall($valores['anno'], $valores['mes'], $valores['dia'], $valores['hora'], $valores['min'], $valores['seg']);
}
//------------------------------------------------------------------------------
//--Entrada--
//$string => ex: "now" "10 September 2000" " 1 day" " 1 week" " 1 week 2 days 4 hours 2 seconds" " 1 month" "next Thursday" "last Monday"
//$timeStamp => ex: 1170889200
//--Salida--
//1170889200
function getTimeUNIXFechaFinal($string,$timeStamp)
{
return strtotime($string, $timeStamp);
}
//------------------------------------------------------------------------------
//--Entrada--
//$timeStamp => ex: 1170889200
//--Salida--
//2007-08-16
function getFechaYMD($timeStamp)
{
return date("Y-m-d", $timeStamp);
}
//------------------------------------------------------------------------------
//--Entrada--
//$fecha => ex: 2007-08-02 16:48:26
//--Salida--
//2007-08-02
function getFechaYMD_BD($fecha)
{
return date("Y-m-d", getTimeUNIX_BD($fecha));
}
//------------------------------------------------------------------------------
//--Entrada--
//$timeStamp => ex: 1170889200
//--Salida--
//16:48:26
function getFechaHIS($timeStamp)
{
return date("H:i:s", $timeStamp);
}
//------------------------------------------------------------------------------
//--Entrada--
//$fecha => ex: 2007-08-02 16:48:26
//--Salida--
//16:48:26
function getFechaHIS_BD($fecha)
{
return date("H:i:s", getTimeUNIX_BD($fecha));
}
//------------------------------------------------------------------------------
//--Entrada--
//$timeStamp => ex: 1170889200
//--Salida--
// 2007-02-08 16:48:26
function getFechaYMD_HIS($timeStamp)
{
$fecha=getFechaYMD($timeStamp) . ' ' . getFechaHIS($timeStamp);
return $fecha;
}
//------------------------------------------------------------------------------
//--Entrada--
//$timeStamp1(fecha final) => ex: 1170889200
//$timeStamp2(fecha inicial) => ex: 1170889230
//--Salida--
// 3 horas
function getDifFechasH($timeStamp1, $timeStamp2)
{
return floor(abs(($timeStamp1-$timeStamp2)/3600));//3600 =>60 * 60
}
//------------------------------------------------------------------------------
//--Entrada--
//$timeStamp1(fecha final) => ex: 1170889200
//$timeStamp2(fecha inicial) => ex: 1170889230
//--Salida--
// 45 days
function getDifFechasD($timeStamp1, $timeStamp2)
{
return floor(abs(($timeStamp1-$timeStamp2)/86400));//86400 =>24 * 60 * 60
}
//------------------------------------------------------------------------------
//--Entrada--
//$timeStamp1(fecha final) => ex: 1170889200
//$timeStamp2(fecha inicial) => ex: 1170889230
//--Salida--
// 1 mes
function getDifFechasM($timeStamp1, $timeStamp2)
{
return floor(abs(($timeStamp1-$timeStamp2)/2592000));//2592000 =>30 * 24 * 60 * 60
}
//------------------------------------------------------------------------------
//--Entrada--
//$fecha1(fecha final) => ex: 2007-09-02 16:48:26
//$fecha2(fecha inicial) => ex: 2007-08-02 16:48:26
//--Salida--
// 3 horas
function getDifFechasH_BD($fecha1, $fecha2)
{
return getDifFechasH(getTimeUNIX_BD($fecha1), getTimeUNIX_BD($fecha2));
}
//------------------------------------------------------------------------------
//--Entrada--
//$fecha1(fecha final) => ex: 2007-09-02 16:48:26
//$fecha2(fecha inicial) => ex: 2007-08-02 16:48:26
//--Salida--
// 45 days
function getDifFechasD_BD($fecha1, $fecha2)
{
return getDifFechasD(getTimeUNIX_BD($fecha1), getTimeUNIX_BD($fecha2));
}
//------------------------------------------------------------------------------
//--Entrada--
//$fecha1(fecha final) => ex: 2007-09-02 16:48:26
//$fecha2(fecha inicial) => ex: 2007-08-02 16:48:26
//--Salida--
// 1 mes
function getDifFechasM_BD($fecha1, $fecha2)
{
return getDifFechasM(getTimeUNIX_BD($fecha1), getTimeUNIX_BD($fecha2));
}
//------------------------------------------------------------------------------
?>
Código :
<?php info(); ?>
Código :
<?php
/*
caducidad()
Función Calcula si ya a pasado un año para avisar que ya caduco
Autor: John Sánchez Alvarez
Este código es libre de usar y modificarse
*/
function caducidad($fecha_enviada, $activada){
if($activada){//me permite determinar si activo la función
if ($fecha_enviada != "0000-00-00"){
//las variable f_ son para trabajar fechas
$f_caduca = strtotime("$fecha_enviada +1 year",$fecha_enviada);
$f_caduca = date("Y-m-d",$f_caduca);
$hoy = date("Y-m-d");
print "<b>Fecha en la cual caduca:</b> ".$f_caduca . "<br>";
print "<b>Fecha de actual:</b> ".$hoy . "<br>";
$f_hoy = strtotime($hoy);
$f_hoy = floor($f_hoy/86400);
// Se divide entre 86400, ya que este es el número de segundos que posee un día
$f_caduca1 = strtotime($f_caduca);
$f_caduca1 = floor($f_caduca1/86400);
//f_compara nos sirve para determinar cuantos días faltan para que se vuelva a habilitar el envió de correo a un determinado usuario
$f_compara = ($f_caduca1-$f_hoy);
print "<b>Dias que faltan para caducar:</b> ".$f_compara . "<br>";
if ($f_compara <= 0){
//El valor de 1 nos indica que se debe actualizar la base de datos
return true;
} else {
return false;
}
} else {
return false;
}
}//Cierro el if
}// Cierra la funcion fecha_caducidad
//Implementación
//Esta fecha es la fecha a la cual deseamos evaluarle su caducida
$fecha_registro = "2007-05-20";
print "<b>Fecha ingresada:</b> ".$fecha_registro."<br>";
if(caducidad($fecha_registro, true)){
//acá ira el código que quieres se ejecute en caso de caducar
print "<b>Estado:</b> Ya caduco";
} else {
//acá ira el código que quieres se ejecute si no ha caducado
print "<b>Estado:</b> No ha caducado";
}
?>
Como puedes observar agrege una segunda condicion a la función caducidad la cual es booleana, si en la segunda condición envias true, la función se activa, si envias false, la función se desactiva.