Introducción
Ya vimos cómo sumarle un día a la fecha de hoy para sacar la fecha del otro día, o la fecha de mañana en PHP. Ahora veamos otras cosas interesantes que podemos hacer con strtotime
. Lo que haremos será ver cómo:
- Obtener la fecha de hace un año
- Saber la fecha que será dentro de un año
- Restar y sumar meses a una fecha
- Sumar minutos a una fecha y hora
- Operar con semanas
Adicionalmente te invito a leer cómo saber la fecha de inicio y fin de mes en PHP y cómo saber los días transcurridos entre 2 fechas.
Por cierto, si tienes dudas de cómo usamos a date para formatear las fechas te recomiendo este post.
Obtener la fecha del año pasado con strtotime
Usamos este código:
<?php
$tiempoDelAnioPasado = strtotime("-1 year");
$formateado = date("Y-m-d H:i:s", $tiempoDelAnioPasado);
echo "Hoy hace un año era $formateado";
Con strtotime le restamos un año a la fecha actual, eso devolverá un entero con segundos que más tarde formateamos con date. El resultado al menos al ejecutar el script mientras escribo esto, es:
Hoy hace un año era 2017-10-04 11:22:51
Saber la fecha que será dentro de un año
Ya deberíamos saber cómo hacerlo, si para restar usamos -1 year
entonces para sumar o ver la fecha del futuro usamos +1 year
.
Quiero aclarar que podemos poner +10 year
, o +50 year
, es decir, cambiar los años. Pero bueno veamos la fecha que será dentro de un año
<?php
$tiempoDelAnioFuturo = strtotime("+1 year");
$formateado = date("Y-m-d H:i:s", $tiempoDelAnioFuturo);
echo "Dentro de un año será $formateado";
La salida en mi caso es:
Dentro de un año será 2019-10-04 11:30:07
Restar y sumar meses
Así como operamos con años, podemos operar con meses.
Sumar meses
Podemos sumar meses a una fecha, no importa si son más de 12. Comencemos viendo este ejemplo que dice la fecha que será dentro de un mes:
<?php
$dentroDeUnMes = strtotime("+1 month");
$formateado = date("Y-m-d H:i:s", $dentroDeUnMes);
echo "Dentro de un mes será $formateado";
Cuya salida es:
Dentro de un mes será 2018-11-04 11:34:29
Podemos también, sumar 14 meses, que sería un año y 2 meses. Como al momento de escribir esto es octubre de 2018, la salida debería ser el mes de diciembre del 2019.
Vamos allá:
<?php
$dentroDeCatorceMeses = strtotime("+14 month");
$formateado = date("Y-m-d H:i:s", $dentroDeCatorceMeses);
echo "Dentro de 14 meses será $formateado";
Notemos que aunque el plural de month es months, usamos month de igual manera (aunque el parseador de PHP sí lo soporta, pero recomiendo dejar todo en singular).
La salida es como lo esperábamos:
Dentro de 14 meses será 2019-12-04 11:36:15
Restar meses
Podemos operar con meses como en el ejemplo de arriba, pero utilizando -
en lugar de +
.
<?php
$haceNueveMeses = strtotime("-9 month");
$formateado = date("Y-m-d H:i:s", $haceNueveMeses);
echo "Hace 9 meses era $formateado";
La salida es:
Hace 9 meses era 2018-01-04 11:38:13
Así de fácil podemos restar meses. Y como lo dije, podemos usar incluso más de 12 meses que sería un año.
Sumar minutos a una fecha y hora
La función strtotime
no nos limita a fechas, también podemos sumar minutos. Veamos este código de ejemplo que suma 15 minutos:
<?php
$dentroDeQuinceMinutos = strtotime("+15 minute");
$formateado = date("Y-m-d H:i:s", $dentroDeQuinceMinutos);
$formateadoAhora = date("Y-m-d H:i:s");
echo "Ahora es $formateadoAhora y dentro de quince minutos será $formateado";
La variable de $formateadoAhora
es para ilustrar la hora actual. La salida es:
Ahora es 2018-10-04 11:46:40 y dentro de quince minutos será 2018-10-04 12:01:40
Igualmente podríamos restar minutos. Por ejemplo, si queremos restar 100 minutos usaríamos -100 minute
.
Operar con semanas
También podemos sumar semanas y días. Para las semanas:
<?php
$dentroDeDosSemanas = strtotime("+2 week");
$formateado = date("Y-m-d H:i:s", $dentroDeDosSemanas);
$formateadoAhora = date("Y-m-d H:i:s");
echo "Ahora es $formateadoAhora y dentro de 2 semanas será $formateado";
En ese caso la salida es:
Ahora es 2018-10-04 13:56:31 y dentro de 2 semanas será 2018-10-18 13:56:31
Con días también podemos trabajar. Si sumamos 14 días es como sumar 2 semanas. Entonces hacemos esto:
<?php
$dentroDeCatorceDias = strtotime("+14 day");
$formateado = date("Y-m-d H:i:s", $dentroDeCatorceDias);
$formateadoAhora = date("Y-m-d H:i:s");
echo "Ahora es $formateadoAhora y dentro de 14 días será $formateado";
El resultado es el mismo:
Ahora es 2018-10-04 13:58:32 y dentro de 14 días será 2018-10-18 13:58:32
Está de más mencionar que podemos igualmente restar semanas y días con la función strtotime
de php.
Más formatos y operaciones
Esto es únicamente una introducción con ejemplos que me parecen que le servirán a otros programadores.
Si quieres ver la lista de todos los formatos disponibles que entiende strotime
te invito a ver la documentación oficial.