PHP, obter a data de amanhã a partir da data

88

Eu tenho uma data PHP na forma de 2013-01-22e quero obter a data de amanhã no mesmo formato, por exemplo 2013-01-23.

Como isso é possível com PHP?

Justin
fonte

Respostas:

201

Use DateTime

$datetime = new DateTime('tomorrow');
echo $datetime->format('Y-m-d H:i:s');

Ou:

$datetime = new DateTime('2013-01-22');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');

Ou:

$datetime = new DateTime('2013-01-22');
$datetime->add(new DateInterval("P1D"));
echo $datetime->format('Y-m-d H:i:s');

Ou em PHP 5.4+:

echo (new DateTime('2013-01-22'))->add(new DateInterval("P1D"))
                                 ->format('Y-m-d H:i:s');
John Conde
fonte
1
Isso usa corrente, preciso passar em uma determinada data.
Justin
A segunda maneira é provavelmente a melhor.
nickb
72
 $tomorrow = date("Y-m-d", strtotime('tomorrow'));

ou

  $tomorrow = date("Y-m-d", strtotime("+1 day"));

Link de ajuda: STRTOTIME ()

Laura Chesches
fonte
1
Usei esta e de todas as respostas é a versão mais curta e simples, obrigado!
Bombelman
17

Já que você marcou isto com , você pode usá-lo com o +1 daymodificador assim:

$tomorrow_timestamp = strtotime('+1 day', strtotime('2013-01-22'));

Dito isso, é uma solução muito melhor usar DateTime .

Rudi Visser
fonte
14
<? php 

//1 Day = 24*60*60 = 86400

echo date("d-m-Y", time()+86400); 

?>
Andy
fonte
17
Observe que isso falhará em casos extremos (horário de verão).
JJJ
Esta resposta está errada. Eu tenho um cronjob que usa isso em um loop, e o sistema morreu.
jewelnguyen8
5

echo date ('Y-m-d',strtotime('+1 day', strtotime($your_date)));

ABDUL JAMAL
fonte
3

Use DateTime:

Para obter amanhã a partir de agora:

$d = new DateTime('+1day');
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

Resultados: 28/06/2017 13/08/20

Para obter amanhã de um encontro:

$d = new DateTime('2017/06/10 08.16.35 +1day')
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

Resultados: 06/11/2017 18.08.35

Espero que ajude!

Gregorio
fonte
1
/**
 * get tomorrow's date in the format requested, default to Y-m-d for MySQL (e.g. 2013-01-04)
 *
 * @param string
 *
 * @return string
 */
public static function getTomorrowsDate($format = 'Y-m-d')
{
    $date = new DateTime();
    $date->add(DateInterval::createFromDateString('tomorrow'));

    return $date->format($format);
}
crmpicco
fonte
1

Por estranho que pareça que funciona perfeitamente bem: date_create( '2016-02-01 + 1 day' );

echo date_create( $your_date . ' + 1 day' )->format( 'Y-m-d' );

Deveria fazer isso

Diogo Neves - Mangaru
fonte
0

Primeiro, chegar a abstrações corretas é sempre uma chave. chave para legibilidade, manutenção e extensão.

Aqui, o candidato bastante óbvio é um ISO8601DateTime. Existem pelo menos duas implementações: a primeira é uma data e hora analisada a partir de uma string e a segunda é amanhã. Portanto, existem duas classes que podem ser usadas, e sua combinação resulta no resultado (quase) desejado:

new Tomorrow(new FromISO8601('2013-01-22'));

Ambos os objetos têm uma data e hora ISO8601, portanto, sua representação textual não é exatamente o que você precisa. Portanto, o golpe final é fazê-los assumir a forma de uma data:

new Date(
    new Tomorrow(
        new FromISO8601('2013-01-22')
    )
);

Visto que você precisa de uma representação textual, não apenas de um objeto, você invoca um value()método.

Para saber mais sobre essa abordagem, dê uma olhada neste post .

Vadim Samokhin
fonte
-1

aqui está a função de trabalho

function plus_one_day($date){
 $date2 = formatDate4db($date);
 $date1 = str_replace('-', '/', $date2);
 $tomorrow = date('Y-m-d',strtotime($date1 . "+1 days"));
 return $tomorrow; }
Muhammad Awais Zulifqar
fonte
o que a função formatDate4db faz? Por que substituir os travessões por barras na string?
braindigitalis
A função formatDate4db passa a data e faz um formato como o formato mysql do banco de dados e a função str_replace, eu tenho o formato de data 2019/12/10 e substituo por -
Muhammad Awais Zulifqar
-4
$date = '2013-01-22';
$time = strtotime($date) + 86400;
echo date('Y-m-d', $time);

Onde 86400 é o número de segundos em um dia.

Jason
fonte
11
Não, um dia nem sempre tem 86400 segundos.
nickb
Eu não entendo o problema. Explique @nickb
Aiyion.Prime
@ Aiyion. Os primeiros dias que mudam para o horário de verão não têm 86400 segundos
dumazy
Eu pensei nisso, o horário de verão é iniciado às duas horas e, portanto, nunca deve resultar em uma data diferente?
Aiyion.Prime
O problema não é o horário de verão. Os horários em um banco de dados realmente devem ser armazenados como UTC, que não tem horário de verão. Se você estiver armazenando suas datas em UTC, isso funcionará bem, mas é um pouco obtuso.
braindigitalis