Adicionar número de dias a uma data

124

Quero adicionar o número de dias à data atual: estou usando o seguinte código:

$i=30;
echo $date = strtotime(date("Y-m-d", strtotime($date)) . " +".$i."days");

Mas em vez de obter a data adequada, estou obtendo isso: 2592000

Por favor sugira.

Pankaj Khurana
fonte
4
pesquise usando nomes de tags com colchetes ao redor deles, por exemplo, [php] [date] addna caixa de pesquisa. Você encontrará muitas respostas para perguntas como esta.
Mikel

Respostas:

247

Isso deve ser

echo date('Y-m-d', strtotime("+30 days"));

strtotime

espera receber uma string contendo um formato de data em inglês dos EUA e tentará analisar esse formato em um carimbo de data / hora do Unix (o número de segundos desde 1 de janeiro de 1970 00:00:00 UTC), relativo ao carimbo de data / hora fornecido agora ou o hora atual, se agora não for fornecido.

enquanto date

Retorna uma string formatada de acordo com a string de formato especificada usando o carimbo de data / hora inteiro especificado ou a hora atual se nenhum carimbo de data / hora for fornecido.

Consulte as páginas de manual para

e suas assinaturas de função.

Gordon
fonte
Acho que isso causará problemas ao cruzar o horário de verão e outros itens engraçados do calendário. Depende do contexto. Você precisa pensar se está procurando 30 blocos de 24 horas, que, ao atravessar um dia de horário de verão, podem colocá-lo às 23h.
JJ Rohrer 23/07
1
@JJRohrer não, não vai. strtotimelevará em consideração qualquer horário de verão para o fuso horário configurado. DST é apenas um problema quando você faz algo como isso OP: stackoverflow.com/questions/4066035
Gordon
Ponto tomado. Cheguei a esta pergunta tentando resolver algo um pouco mais próximo da pergunta que você referenciava. Espero que meu comentário acima faça com que outras pessoas pensem em levar a sério seus cálculos de datas - é fácil esquecer todas as exceções.
JJ Rohrer
64

Este pode ser bom

function addDayswithdate($date,$days){

    $date = strtotime("+".$days." days", strtotime($date));
    return  date("Y-m-d", $date);

}
Gowri
fonte
4
A solução acima pode ser compactada em uma linha também se você precisar de uma solução rápida e não desejar criar uma função. data do eco ("Ymd", strtotime ("+ 12 dias", strtotime (20130101))))
Mayank Jaiswal
46
$date = new DateTime();
$date->modify('+1 week');
print $date->format('Y-m-d H:i:s');

ou print date('Y-m-d H:i:s', mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 7, date("Y"));

chx
fonte
Este método trata do cruzamento do horário de verão. Não tenho certeza se o php é responsável por outras peculiaridades de tempo, como segundos bissextos, mas, dependendo de suas necessidades, provavelmente é melhor usar DateTime vs. StrToTime se estiver lidando com dias corridos.
JJ Rohrer
@chx Essa solução também permite uma data mais cuidadosa; por exemplo, novo DateTime ('2016-12-09 10:35:58'); que é proveniente de um carimbo de data / hora do banco de dados ...
mshaffer 19/12/16
10
$today=date('d-m-Y');
$next_date= date('d-m-Y', strtotime($today. ' + 90 days'));
echo $next_date;
shraddha Dharmamer
fonte
10

Você também pode adicionar assim, se desejar a data 5 dias a partir de uma data específica:

Você tem uma variável com uma data como esta (obtida de uma entrada ou banco de dados ou apenas codificada):

$today = "2015-06-15"; // Or can put $today = date ("Y-m-d");

$fiveDays = date ("Y-m-d", strtotime ($today ."+5 days"));

echo $fiveDays; // Will output 2015-06-20
Andy
fonte
7

Lembre-se de que a alteração do relógio muda por causa do horário de verão pode causar alguns problemas ao calcular apenas os dias.

Aqui está uma pequena função php que cuida disso:

function add_days($date, $days) {
    $timeStamp = strtotime(date('Y-m-d',$date));
    $timeStamp+= 24 * 60 * 60 * $days;

    // ...clock change....
    if (date("I",$timeStamp) != date("I",$date)) {
        if (date("I",$date)=="1") { 
            // summer to winter, add an hour
            $timeStamp+= 60 * 60; 
        } else {
            // summer to winter, deduct an hour
            $timeStamp-= 60 * 60;           
        } // if
    } // if
    $cur_dat = mktime(0, 0, 0, 
                      date("n", $timeStamp), 
                      date("j", $timeStamp), 
                      date("Y", $timeStamp)
                     ); 
    return $cur_dat;
}
Bjoern
fonte
7

Você também pode tentar:

$date->modify("+30 days");

Insectatorious
fonte
6

Você pode fazer isso manipulando o timecode ou usando strtotime () . Aqui está um exemplo usando strtotime.

$ data ['created'] = date ('Ymd H: i: s', strtotime ("+ 1 semana"));

Paul Truesdell
fonte
6

Você pode usar strtotime ()
$data['created'] = date('Y-m-d H:m:s', strtotime('+1 week'));

Laxman13
fonte
6

Eu sei que essa é uma pergunta antiga, mas para o PHP <5.3 você pode tentar o seguinte:

$date = '05/07/2013';
$add_days = 7;
$date = date('Y-m-d',strtotime($date) + (24*3600*$add_days)); //my preferred method
//or
$date = date('Y-m-d',strtotime($date.' +'.$add_days.' days');
Fabrizio
fonte
5
$date = "04/28/2013 07:30:00";

$dates = explode(" ",$date);

$date = strtotime($dates[0]);

$date = strtotime("+6 days", $date);

echo date('m/d/Y', $date)." ".$dates[1];
Mayank Raipure
fonte
4

Você pode tentar isso.

$i=30;
echo  date("Y-m-d",mktime(0,0,0,date('m'),date('d')+$i,date('Y')));
J.Rob
fonte
3

Simples e Melhor

echo date('Y-m-d H:i:s')."\n";
echo "<br>";
echo date('Y-m-d H:i:s', mktime(date('H'),date('i'),date('s'), date('m'),date('d')+30,date('Y')))."\n";

Tente isto

user3767878
fonte
3
//add the two day

$date = "**2-4-2016**"; //stored into date to variable

echo date("d-m-Y",strtotime($date.**' +2 days'**));

//print output
**4-4-2016**
Sajan Patel
fonte
2

Use esta função addDate () para adicionar ou subtrair dias, meses ou anos (você precisará da função auxiliar reformatDate () também)

/**
 * $date self explanatory
 * $diff the difference to add or subtract: e.g. '2 days' or '-1 month'
 * $format the format for $date
 **/
    function addDate($date = '', $diff = '', $format = "d/m/Y") {
        if (empty($date) || empty($diff))
            return false;
        $formatedDate = reformatDate($date, $format, $to_format = 'Y-m-d H:i:s');
        $newdate = strtotime($diff, strtotime($formatedDate));
        return date($format, $newdate);
    }
    //Aux function
    function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
        $date_aux = date_create_from_format($from_format, $date);
        return date_format($date_aux,$to_format);
    }

Nota: apenas para php> = 5.3

Juancho Ramone
fonte
1
//Set time zone
date_default_timezone_set("asia/kolkata");
$pastdate='2016-07-20';
$addYear=1;
$addMonth=3;
$addWeek=2;
$addDays=5;
$newdate=date('Y-m-d', strtotime($pastdate.' +'.$addYear.' years +'.$addMonth. ' months +'.$addWeek.' weeks +'.$addDays.' days'));
echo $newdate;
Dharmendra Verma Web Developer
fonte
1

Embora essa seja uma pergunta antiga, essa maneira de fazê-lo levaria muitas situações e parece robusta. Você precisa ter o PHP 5.3.0 ou superior.

$EndDateTime = DateTime::createFromFormat('d/m/Y', "16/07/2017");
$EndDateTime->modify('+6 days');
echo $EndDateTime->format('d/m/Y');

Você pode ter qualquer tipo de formato para a sequência de datas e isso funcionaria.

Deepak Daniel
fonte