Neste tutorial mostraremos como subtrair ou somar dias de uma data qualquer - utilizando a função strtotime().
Função Strtotime / Função Date (ou Função Strftime)
Função strtotime — Interpreta qualquer descrição de data/hora em texto em inglês em timestamp Unix. Veja a referência completa no link: Referência strtotime PHP
1. A função strototime interpreta os termos inglês de dia (day), hora (hour), minuto (minute), segundo(second), mês (month), semana (week), ano(year), etc. e transforma em um número sequencial do UNIX, denominado Timestamp, que é o tempo em segundos contado desde 01 de janeiro de 1970. Este formato facilita e deve ser utilizado para os cálculos com datas e horas.
Veja o exemplo abaixo:
<?php
echo '<h1> Funcão strtotime</h1>';
echo '<h3> Datas transformadas em Timestamp Unix</h3>';
echo(strtotime("now") . "<br/>");
echo(strtotime("3 October 2005") . "<br/>");
echo(strtotime("+5 hours") . "<br/>");
echo(strtotime("+1 week") . "<br/>");
echo(strtotime("+1 week 3 days 7 hours 6 minutes 5 seconds") . "<br/>");
echo(strtotime("today") . "<br/>");
echo(strtotime("last Sunday") . "<br/>");
echo(strtotime("14-08-2016"));
?>
2. Para melhor entendimento do código, faça o teste no aplicativo PHP Squids Editor. Clique no botão [Run] para visualizar o resultado.
2.1. Veja a imagem do resultado abaixo (registrado no dia 29/12/2016):
3. Para retornar o Timestamp Unix em um formato de data e hora, utilize a função date(). Informe o tipo de formato que você deseja - veja a tabela no link: https://secure.php.net/manual/pt_BR/function.date.php
<?php
echo '<h1> Funcão date</h1>';
echo '<h3> Datas transformadas de Timestamp Unix para formato data</h3>';
echo date('d-m/Y',(strtotime('now'))) . '<br/>';
echo date('d , M, Y',(strtotime('today'))) . '<br/>';
echo date('d F - H:m',(strtotime("last Sunday"))) . "<br/>";
echo date ('d|m|y',(strtotime("14-08-2016")));
?>
4. Para melhor entendimento do código, faça o teste no aplicativo PHP Squids Editor. Clique no botão [Run] para visualizar o resultado.
4.1. Veja a imagem do resultado abaixo (registrado no dia 29/12/2016):
Dica: Se desejar formatos de data/tempo mais elaboradas e de acordo com a configuração do seu idioma, utilize a função strftime no lugar da função date. Veja a referência completa no link: Referência strftime PHP. Leia também: Como converter data do MySQL para o formato padrão BR (brasileiro).
Subtrair ou somar dias em uma data qualquer
5. Agora que já vimos um pouco sobre as funções strtotime e date, fica fácil entender como calcular datas em PHP. Veja o nosso exemplo a seguir:
<?php
// Soma 15 dias a partir da data indicada
echo date('d/m/Y', strtotime('+15 days', strtotime('3 October 2015')));
// Resultado: 18/10/2015
echo '<br /><br/>';
// Subtrai 25 dias a partir da data indicada
echo date('d/m/Y', strtotime('-25 days', strtotime('14-12-2016')));
// Resultado: 19/11/2016
echo '<br /><br/>';
// Soma 10 dias a partir da data de hoje
echo date('d/m/Y', strtotime('+10 days'));
// Resultado: 08/01/2017
echo '<br /><br/>';
// Subtrai 10 dias a partir da data de hoje
echo date('d/m/Y', strtotime('-10 days'));
// Resultado: 19/12/2016
?>
6. Para melhor entendimento do código, faça o teste no aplicativo PHP Squids Editor. Clique no botão [Run] para visualizar o resultado.
6.1. Veja a imagem do resultado abaixo (registrado no dia 29/12/2016):
Explicando o código
Subtrair ou somar dias a partir de hoje:
// Soma 10 dias a partir da data de hoje
echo date('d/m/Y', strtotime('+10 days'));
// Resultado: 08/01/2017
echo '<br /><br/>';
// Subtrai 10 dias a partir da data de hoje
echo date('d/m/Y', strtotime('-10 days'));
// Resultado: 19/12/2016
No exemplo, a função strtotime('+10 days') soma o total de segundos de 10 dias (+ 10 days) com o total de segundos do dia de hoje, contados desde 1 de janeiro de 1970 (sequência timestamp Unix utilizado para controlar datas no PHP).
A função date retorna o valor do sequencial timestamp determinado pela função strtotime, no formato 'd/m/Y' (dia/mês/ano). Desta forma, obteremos a soma de 10 dias a partir de hoje.
De forma similar, o mesmo acontece para a subtração.
Subtrair ou somar dias a partir de uma data indicada:
// Soma 10 dias a partir da data de hoje
echo date('d/m/Y', strtotime('+10 days'));
// Resultado: 08/01/2017
echo '<br /><br/>';
// Subtrai 10 dias a partir da data de hoje
echo date('d/m/Y', strtotime('-10 days'));
// Resultado: 19/12/2016
No exemplo, a função strtotime('+15 days', strtotime('3 October 2015')) soma o total de segundos de 15 dias (+ 15 days) com o total de segundos do dia 03 de outubro de 2015 ('3 October 2015'), contados desde 1 de janeiro de 1970 (sequência timestamp Unix utilizado para controlar datas no PHP).
A função date retorna o valor do sequencial timestamp determinado pela função strtotime, no formato 'd/m/Y' (dia/mês/ano). Desta forma, obteremos a soma de 10 dias a partir de hoje.
De forma similar, o mesmo acontece para a subtração.