Em certas situações, desejo adicionar 1 dia ao valor da minha variável formatada DATETIME:
$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));
Qual é a melhor maneira de fazer isso?
time()
porstrtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}")
.Há mais de uma maneira de fazer isso com DateTime, que foi introduzido no PHP 5.2. Ao contrário do uso,
strtotime()
isso levará em conta o horário de verão e o ano bissexto.$datetime = new DateTime('2013-01-29'); $datetime->modify('+1 day'); echo $datetime->format('Y-m-d H:i:s'); // Available in PHP 5.3 $datetime = new DateTime('2013-01-29'); $datetime->add(new DateInterval('P1D')); echo $datetime->format('Y-m-d H:i:s'); // Available in PHP 5.4 echo (new DateTime('2013-01-29'))->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'); // Available in PHP 5.5 $start = new DateTimeImmutable('2013-01-29'); $datetime = $start->modify('+1 day'); echo $datetime->format('Y-m-d H:i:s');
fonte
+2 day
ou+2 days
(obviamente+2 days
é semanticamente mais correto)O construtor DateTime aceita um parâmetro
string time
.$time
pode ser coisas diferentes, tem que respeitar o formato datetime .Existem alguns valores válidos como exemplos:
'now'
(o valor padrão)2017-10-19
2017-10-19 11:59:59
2017-10-19 +1day
Portanto, no seu caso, você pode usar o seguinte.
$dt = new \DateTime('now +1 day'); //Tomorrow $dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02
fonte
strtotime
para converter a string em um carimbo de horapor exemplo:
$time = strtotime($myInput); $newTime = $time + 86400;
Se for apenas adicionar 1 dia, usar strtotime novamente é provavelmente um exagero.
fonte
date()
o fuso horário local, é levado em consideração que cuidará do horário de verão.Você pode usar
$now = new DateTime(); $date = $now->modify('+1 day')->format('Y-m-d H:i:s');
fonte
Eu sugiro começar a usar as classes Zend_Date do Zend Framework . Eu sei, é um pouco offtopic, mas vou gostar assim :-)
$date = new Zend_Date(); $date->add('24:00:00', Zend_Date::TIMES); print $date->get();
fonte
Você pode usar o seguinte.
$start_date = date('Y-m-d H:i:s'); $end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));
Você também pode definir os dias como constantes e usar como abaixo.
if (!defined('ADD_DAYS')) define('ADD_DAYS','+3 days'); $end_date = date("Y-m-d 23:59:59", strtotime(ADD_DAYS, strtotime($start_date)));
fonte
Usando o tempo de solicitação do servidor para adicionar dias. Trabalhando conforme o esperado.
25/08/19 => 27/09/19
$timestamp = $_SERVER['REQUEST_TIME']; $dateNow = date('d/m/y', $timestamp); $newDate = date('d/m/y', strtotime('+2 day', $timestamp));
Aqui, '+2 dias' para adicionar qualquer número de dias.
fonte
Existe uma maneira mais concisa e intuitiva de adicionar dias à data do php. Não me entenda mal, essas expressões php são ótimas, mas você sempre tem que pesquisar no Google como tratá-las. Sinto falta da facilidade de preenchimento automático para isso.
Aqui está como eu gosto de lidar com esses casos:
(new Future( new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'), new OneDay() )) ->value();
Para mim, é muito mais intuitivo e o preenchimento automático funciona fora da caixa. Não há necessidade de procurar a solução no Google todas as vezes.
Como um bom bônus, você não precisa se preocupar em formatar o valor resultante, ele já está no formato ISO8601.
Esta é a biblioteca de merengue, há mais exemplos aqui .
fonte