Adicionando três meses a uma data em PHP


90

Tenho uma variável chamada $effectiveDatecontendo a data 26/03/2012 .

Estou tentando adicionar três meses a esta data e não tenho tido sucesso nisso.

Aqui está o que tentei:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));

e

$effectiveDate = strtotime(date("Y-m-d", strtotime($effectiveDate)) . "+3 months");

O que estou fazendo errado? Nenhum pedaço de código funcionou.


6
O que significa "não funcionou"?
Jon

2
Estou recebendo uma 1340649000resposta, o que parece correto.
Dogbert

Tem certeza de $effectiveDateque armazena o que acha que armazena? Isso funciona para mim .
Josh

Estou esperando essa data para 26/06/2012, adicionando 3 meses a
26/03/2012

E date('Y-m-d', 1340661600)2012-06-26qual é o correto.
Tchoupi

Respostas:


196

Altere-o para obter o formato esperado:

$effectiveDate = date('Y-m-d', strtotime("+3 months", strtotime($effectiveDate)));

Como lidar com uma variável de meses? como $ months contém o número de meses? "+ '$months' months"não funciona
HKK

4
$offset = 5; echo date('Y-m-d', strtotime("+$offset months", strtotime('2000-01-01'))); Demo
Cees Timmerman

date () não usa localizações. Melhor é strftime ().
user706420

2
Isso não funcionará para datas como esta: data ('2018-01-31', strtotime ('+ 3 meses')). Se a data terminar em 31 e os próximos 3 meses não, ele não retornará a data correta.
Dan H

3
não é uma boa solução - não retorna valores corretos - como Dan H mencionou
Josef Vancura

17

Esta resposta não é exatamente para esta pergunta. Mas vou adicionar isso, pois esta questão ainda pode ser pesquisada sobre como adicionar / deduzir o período a partir da data.

$date = new DateTime('now');
$date->modify('+3 month'); // or you can use '-90 day' for deduct
$date = $date->format('Y-m-d h:i:s');
echo $date;

6

Presumo que por "não funcionou" você quer dizer que está fornecendo um carimbo de data / hora em vez da data formatada, porque você estava fazendo isso corretamente:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate)); // returns timestamp
echo date('Y-m-d',$effectiveDate); // formatted version

3

Você precisa converter a data em um valor legível. Você pode usar strftime () ou date ().

Experimente isto:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));
$effectiveDate = strftime ( '%Y-%m-%d' , $effectiveDate );
echo $effectiveDate;

Isso deve funcionar. Eu gosto mais de usar o strftime, pois ele pode ser usado para localização, você pode tentar.


3

A resposta de Tchoupi pode ser um pouco menos prolixa concatenando o argumento para strtotime () da seguinte maneira:

$effectiveDate = date('Y-m-d', strtotime($effectiveDate . "+3 months") );

(Isso depende de detalhes mágicos de implementação, mas você sempre pode dar uma olhada neles se estiver com razão.


2

O seguinte deve funcionar, por favor, tente isto:

$effectiveDate = strtotime("+1 months", strtotime(date("y-m-d")));
echo $time = date("y/m/d", $effectiveDate);

1

Seguir deve funcionar

$d = strtotime("+1 months",strtotime("2015-05-25"));
echo   date("Y-m-d",$d); // This will print **2015-06-25** 

1

Adicione enésimos dias, meses e anos

$n = 2;
for ($i = 0; $i <= $n; $i++){
    $d = strtotime("$i days");
    $x = strtotime("$i month");
    $y = strtotime("$i year");
    echo "Dates : ".$dates = date('d M Y', "+$d days");
    echo "<br>";
    echo "Months : ".$months = date('M Y', "+$x months");
    echo '<br>';
    echo "Years : ".$years = date('Y', "+$y years");
    echo '<br>';
}

0

O seguinte deve funcionar, mas pode ser necessário alterar o formato:

echo date('l F jS, Y (m-d-Y)', strtotime('+3 months', strtotime($DateToAdjust)));
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.