PHP: Restar o Sumar Dias, Semanas, Meses o Años a la fecha actual
21 septiembre 2012 22 comentarios
Recordemos que la funcion date(‘Y-m-d’), nos devuelve la fecha actual en el formato ‘Año-mes-dia’ y si queremos otro formato solo cambiamos el orden, por ejemplo date(‘d-m-Y’). El siguiente script muestra como Restar Dias, Semanas, Meses o Años a la fecha actual en PHP.
El codigo
$dt_Ayer= date('Y-m-d', strtotime('-1 day')) ; // resta 1 día $dt_laSemanaPasada = date('Y-m-d', strtotime('-1 week')) ; // resta 1 semana $dt_elMesPasado = date('Y-m-d', strtotime('-1 month')) ; // resta 1 mes $dt_ElAnioPasado = date('Y-m-d', strtotime('-1 year')) ; // resta 1 año //Mostrar fechas echo $dt_Ayer; echo $dt_laSemanaPasada; echo $dt_elMesPasado; echo $dt_ElAnioPasado; /* Resultado (fecha actual: 2012-09-18): 2012-09-17 2012-09-11 2012-08-18 2011-09-18 */
…Por el contrario si lo que deseas es sumar entonces solo cambias el signo – por un +, asi:
$dt_5DiasDespues = date('Y-m-d', strtotime('+5 day')) ; // Suma 5 días $dt_5SemanasDespues = date('Y-m-d', strtotime('+5 week')) ; // Suma 5 semanas $dt_5MesesDespues = date('Y-m-d', strtotime('+5 month')) ; // Suma 5 meses $dt_5AniosDespues = date('Y-m-d', strtotime('+5 year')) ; // Suma 5 años //Mostrar fechas echo $dt_5DiasDespues; echo $dt_5SemanasDespues; echo $dt_5MesesDespues; echo $dt_5AniosDespues; /* Resultado (fecha actual: 2012-09-18): 2012-09-23 2012-10-23 2013-02-18 2017-09-18 */
¿Facil, no?
Si tienes alguna duda expresala en un comentario. Saludos.
Enlaces relacionados:
_PHP: Sumar o Restar Dias a cualquier fecha_
_PHP: Obtener el ultimo día de cualquier mes_
_PHP: Mostrar la fecha actual en español_
_JAVA: Determinar si un año es Bisiesto_
_PHP: Obtener el ultimo día de cualquier mes_
_PHP: Mostrar la fecha actual en español_
_JAVA: Determinar si un año es Bisiesto_
Después de varias pruebas ya logré resolver el asunto.
Aquí lo incluyo para quienes lo quieran usar.
do {
$hacetanto = $year – $row[«yid»] ; // resta los años
echo «Un día como hoy en el año de «.$row[«yid»].» (hace «.$hacetanto.» años): «.$row[«content»].» «;
} while ($row = mysql_fetch_array($consulta));
echo » \n»;
} else {
echo «En un día como hoy no tenemos efemérides registradas.»;
}
Si gustan verlo en vivo aparece diario en:
http://aprendamos.org/
Trato de retomar el código para algo más complejo. Tengo fechas de acontecimientos en una base de datos que contienen día, mes y año separados. En mi página quiero poner «hace tantos años», entonces:
$hoy = strftime(«%Y-%m-%d» ,time());
$year = strftime(«%Y»,strtotime($hoy)); // tengo el año actual
// hago la consulta para sacar los registros de la base de datos
$consulta = mysql_query(«SELECT * FROM `efemerides` WHERE `mid`=’$el_mes’ AND `did`=’$dia’ ORDER BY `yid`»);
if ($row = mysql_fetch_array($consulta)){
while ($field = mysql_fetch_field($consulta))
// inicia la presentación de cada registro
echo » \n»;
do {
$hacetanto = $year, strtotime(-«.$row[«yid»].») ; // resta los años
echo «Un día como hoy en el año de «.$row[«yid»].» (hace $hacetanto años: «.$row[«content»].» «;
} while ($row = mysql_fetch_array($consulta));
echo » \n»;
} else {
echo «En un día como hoy no tenemos efemérides registradas.»;
}
Para obtener la variable $hacetanto algo estoy poniendo mal que no obtengo resultados.
¿ALGUNA SUGERENCIA O ALGUIEN QUE IDENTIFIQUE QUÉ ESCRIBÍ MAL?
Gracias de antemano.
Muchas gracias por el este artículo, me sirvio bastante para resolver la problemática que me aquejaba.
les cuento me pidieron un ejercicio y no se como desarrollarlo en php a ver si me pueden ayudar
tengo estos datos
fecha 1,fecha 2,periodo,dias,fecha 3
se debe calcular entre fecha 2 y periodo el tiempo transcurrido y al cabo de cada 5 años sumar 3 dias.el resultado debe reflejarse en días teniendo como numero base 30 + el numero de dias si es mayor a 5 años.
y con fecha 1 y fecha 3 siendo el inicio y el fin, segun mi fecha inicial me debe mostrar en fecha 3 o final los dias reflejados en el campo dias.
Quien me ayuda con eso por favor…
en donde debo colocar ese codigo?
Hola, me gustaria saber como puedo hacer eso mismo pero de un dato rescatado de una base de datos, de una fecha entregada? ejemplo del 05-01-2010 gracias
Hola, cómo se haría que mediante una función o clase solo se pueda hacer más o menos así:
echo resultadodia($dia,-1);
SI necesitan esta funcion suma los dias y verifica que no sea sabado o domingo, caso contrario arrastra al primer dia laborable.
function sumarDiaLaborables($fecha, $dias) {
$nuevafecha = date(‘Y-m-d’, strtotime(«+$dias day», strtotime($fecha)));
$diasemana = strtolower(date(‘l’, strtotime($nuevafecha)));
if ($diasemana == «saturday» || $diasemana == «sunday») {
if ($diasemana == «saturday») {
$sumar_dias = 2;
}
if ($diasemana == «sunday») {
$sumar_dias = 1;
}
return $this->sumarDiaLaborables($nuevafecha, $sumar_dias);
} else
return $nuevafecha;
}
muchas gracias amigo
No funciona a la perfección , deberías probar todas las probabilidades, por que por ejemplo hoy es 31 de enero y quiero sumarle un mes y me devuelve 3 de marzo , lo cual es erróneo. Muchas gracias Por La atención Prestada , Saludos.
Buena aportación.
Tengo una tabla con una fecha en formato y-m-d hh-mm-ss….. como extraigo solo la fecha y a esa fecha le sumo el tiempo que tengo en otro campo???
como hago para restarle una semana pero teniendo solo los campos de dia y mes sin necesidad de tener los años para respuestas mi correo es
elcris1793@hotmail.com
como hago para restarle una semana pero teniendo solo los campos de dia y mes sin necesidad de tener los años
hola en mi formulario quiero sumar años a mi fecha inicial para que me de como resultado fecha final automaticamente con php como hago gracias por responder
Hola, muy bueno. me sirvio muchisimo.
Les dejo como lo utilice yo por si alguno le sirve, con variable
// primero chequear si la resta a sumar o restar es negativa o positiva
if ($total < 0){
/* $total es obtenido por otra funcion que resta la fecha actual con la duracion de un numero en dias obtenido de una base de datos.*/
Funcion restar fechas.
$Fecha_Mensaje = date("j-n-Y");
$Fecha_Mensaje = strtotime("$Fecha_Mensaje");
$fecha_alta = strtotime("$fecha_alta"); // $fecha_alta obtenido desde base de datos ej, 05-8-2013
$datediff = $Fecha_Mensaje – $fecha_alta;
$restan = floor($datediff/(60*60*24));
$total = $duracion – $restan;
$restoactual = "$total day"; // en este caso daría un numero negatio, ej -5
}else{
$restoactual = "+$total day"; // en este caso daría un numero positivo ej -5 y le agrego el + para que funcione.
}
$dt_definir= date('d-m-Y', strtotime($restoactual)) ; //
Saludos.
Necesito sumar los meses, pero si estos se pasan del rango, es decir que llegaran a ser 14 meses, que cambie de año, como puedo hacer eso?
Ya pude hacerlo, gracias por aportar tus conocimientos 🙂
Gracias por visitar Marieli. Saludos cordiales.
Pingback: PHP: Mostrar la fecha actual en español « .::programming notes::. Gonzalo Silverio
Pingback: PHP: Obtener el ultimo día de cualquier mes « .::programming notes::. Gonzalo Silverio
Pingback: PHP: Sumar o Restar Dias a cualquier fecha « .::programming notes::. Gonzalo Silverio