Adicionando dias a $ Date em PHP


215

Tenho uma data retornada como parte de uma consulta mySQL no formulário 2010-09-17

Gostaria de definir as variáveis ​​$ Date2 para $ Date5 da seguinte maneira:

$Date2 = $Date + 1

$Date3 = $Date + 2

etc ..

para que ele retorne 2010-09-18, 2010-09-19etc ...

eu tentei

date('Y-m-d', strtotime($Date. ' + 1 day'))

mas isso me dá a data antes $Date.

Qual é a maneira correta de obter minhas datas no formato 'Ymd' para que possam ser usadas em outra consulta?


Respostas:


446

Tudo que você precisa fazer é usar em daysvez de day:

<?php
$Date = "2010-09-17";
echo date('Y-m-d', strtotime($Date. ' + 1 days'));
echo date('Y-m-d', strtotime($Date. ' + 2 days'));
?>

E ele sai corretamente:

2010-09-18
2010-09-19

7
Ele produz corretamente usando daytão bem ... date("Y-m-d", strtotime('2010-09-17 + 1 day'))-> 2010-09-18, date("Y-m-d", strtotime('2010-09-17 + 2 day'))->2010-09-19
Daniel Vandersluis

Apenas tentei dessa maneira e funcionou. Ainda não tenho ideia de por que recebi um valor um dia antes da minha data de início, quando o experimentei inicialmente.
Istari

E se eu tivesse uma variável para adicionar o número de dias?
Carlos Martins

3
@Carlos echo date ("Ymd", strtotime ($ Date. '+'. $ Variable. 'Days'));
Pradeep Kumar Prabaharan

Não, esse método não funciona. Ele está retornando alguma data de 2004.
gegobyte

81

Se você estiver usando o PHP 5.3, poderá usar um DateTimeobjeto e seu addmétodo:

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->add(new DateInterval('P1D')); // P1D means a period of 1 day
$Date2 = $date->format('Y-m-d');

Dê uma olhada na página do manual do DateIntervalconstrutor para ver como construir outros períodos para adicionar à sua data (dois dias seriam 'P2D', três seriam 'P3D'etc.).

Sem o PHP 5.3, você deve poder usar strtotimeda maneira que fez (eu testei e funciona nos 5.1.6 e 5.2.10):

$Date1 = '2010-09-17';
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day"));
// var_dump($Date2) returns "2010-09-18"

Desculpe Daniel, mas o servidor web executa o php 5.2.6, então isso não vai funcionar #
Istari

2
DateTime::constructusa o mesmo mecanismo strtotimepara analisar a data, para que você também pode fazer new DateTime("+1 day $date")o que não exigiria 5.3
Gordon

Eu não tive a intenção de downvote isso, mas de alguma forma eu fiz = /
Steven

Esta é a resposta real para php 5.5+
TheLegendaryCopyCoder

29

A partir do PHP 5.2, você pode usar modify com um objeto DateTime:

http://php.net/manual/en/datetime.modify.php

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->modify('+1 day');
$Date2 = $date->format('Y-m-d');

Tenha cuidado ao adicionar meses ... (e, em menor grau, anos)


resposta aceita apenas dá resposta para 15000+ dias em que esta resposta dá a resposta quando você adiciona 25000+ dias também ..
Pradeep Kumar Prabaharan

Você também pode consultar isso em um DateTimeImmutable () e obtém uma cópia modificada sem risco de alterar o original.
Xavi Montero

17

Aqui está um pequeno trecho para demonstrar as modificações de data:

$date = date("Y-m-d");
//increment 2 days
$mod_date = strtotime($date."+ 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//decrement 2 days
$mod_date = strtotime($date."- 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 month
$mod_date = strtotime($date."+ 1 months");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 year
$mod_date = strtotime($date."+ 1 years");
echo date("Y-m-d",$mod_date) . "\n";

você pode ver meus relacionados (quesiton) [ stackoverflow.com/q/61421783/8919244] ?
Faisal

8

Você também pode usar o seguinte formato

strtotime("-3 days", time());
strtotime("+1 day", strtotime($date));

Você pode empilhar as alterações desta maneira:

strtotime("+1 day", strtotime("+1 year", strtotime($date)));

Observe a diferença entre essa abordagem e a de outras respostas: em vez de concatenar os valores +1 daye <timestamp>, você pode simplesmente passar o registro de data e hora como o segundo parâmetro de strtotime.


5

Usando uma variável para Número de dias

$myDate = "2014-01-16";
$nDays = 16;
$newDate = strtotime($myDate . '+ '.$nDays.'days');
echo newDate('d/m/Y', $soma); //format new date 

5

Aqui está a solução mais simples para sua consulta

$date=date_create("2013-03-15"); // or your date string
date_add($date,date_interval_create_from_date_string("40 days"));// add number of days 
echo date_format($date,"Y-m-d"); //set date format of the result


0

Todos têm que usar o código abaixo:

$nday = time() + ( 24 * 60 * 60);    
echo 'Now:       '. date('Y-m-d') ."\n";    
echo 'Next Day: '. date('Y-m-d', $nday) ."\n";

1
Você não deve fazê-lo desta forma, eventualmente, você vai ter problemas com segundos bissextos
Nathan
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.