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?

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');

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 ()


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 .


14
<? php 

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

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

?>

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


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!


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);
}

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


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 .


-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; }

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.


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
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.