Adicionar um dia a uma data
o meu código para adicionar um dia a uma data devolve uma data antes do dia a adicionar:
2009-09-30 20:24:00
a data após a adição de um dia deve ser rolada para o mês seguinte: 1970-01-01 17:33:29
<?php
//add day to date test for month roll over
$stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00"));
echo 'date before day adding: '.$stop_date;
$stop_date = date('Y-m-d H:i:s', strtotime('+1 day', $stop_date));
echo ' date after adding one day. SHOULD be rolled over to the next month: '.$stop_date;
?>
Já usei um código muito semelhante antes, o que estou a fazer de errado aqui?
10 answers
<?php
$stop_date = '2009-09-30 20:24:00';
echo 'date before day adding: ' . $stop_date;
$stop_date = date('Y-m-d H:i:s', strtotime($stop_date . ' +1 day'));
echo 'date after adding 1 day: ' . $stop_date;
?>
Para o PHP 5, 2, 0+, pode também fazer o seguinte:
$stop_date = new DateTime('2009-09-30 20:24:00');
echo 'date before day adding: ' . $stop_date->format('Y-m-d H:i:s');
$stop_date->modify('+1 day');
echo 'date after adding 1 day: ' . $stop_date->format('Y-m-d H:i:s');
$date = new DateTime('2000-12-31');
$date->modify('+1 day');
echo $date->format('Y-m-d') . "\n";
Solução mais simples:
$date = new DateTime('+1 day');
echo $date->format('Y-m-d H:i:s');
$date = date('Y-m-d', strtotime("+1 day"));
Para qualquer data:
date('Y-m-d', strtotime("+1 day", strtotime($date)));
Tenta isto
echo date('Y-m-d H:i:s',date(strtotime("+1 day", strtotime("2009-09-30 20:24:00"))));
Simples de ler e entender:
$original_date = "2009-09-29";
$time_original = strtotime($original_date);
$time_add = $time_original + (3600*24); //add seconds of one day
$new_date = date("Y-m-d", $time_add);
echo $new_date;
Eu adiciono sempre 86400 (segundos num dia):
$stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00") + 86400);
echo 'date after adding 1 day: '.$stop_date;
Não é a melhor maneira de o fazer, mas funciona!
Embora concorde com a resposta de Doug Hays, vou dizer aqui que a razão pela qual o seu código não funciona é porque strtotime () espera um INT como o segundo argumento, não uma cadeia (mesmo que represente uma data)
Se activar a comunicação máxima de erros, irá ver isto como um erro "um valor numérico não bem formado", que é o nível de E_NOTICE.
O Método modify()
que pode ser utilizado para adicionar incrementos a um valor DateTime
existente.
Crie um novo objecto DateTime
com a data e hora actuais:
$due_dt = new DateTime();
Uma vez que tenha o objecto DateTime
, pode manipular o seu valor adicionando ou subtraindo períodos de tempo:
$due_dt->modify('+1 day');
Pode ler mais no Manual do PHP .
O seguinte código obtém o primeiro dia de janeiro do ano corrente (mas pode ser outra data) e adiciona 365 dias a esse dia (mas pode ser N número de dias) usando a classe DateTime e seu método modifica () e formato ():
echo (new DateTime((new DateTime())->modify('first day of January this year')->format('Y-m-d')))->modify('+365 days')->format('Y-m-d');