Добавление одного дня к дате

Мой код для добавления одного дня к дате возвращает дату перед добавлением дня: 2009-09-30 20:24:00 дата после добавления одного дня ДОЛЖНА перевернуться до следующего месяца: 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;
?>

Я использовал довольно похожий код раньше, что я делаю неправильно здесь?

Ответ 1

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

Для PHP 5.2.0+ вы также можете сделать следующее:

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

Ответ 2

$date = new DateTime('2000-12-31');

$date->modify('+1 day');
echo $date->format('Y-m-d') . "\n";

Ответ 3

Самое простое решение:

$date = new DateTime('+1 day');
echo $date->format('Y-m-d H:i:s');

Ответ 4

Попробуйте это

echo date('Y-m-d H:i:s',date(strtotime("+1 day", strtotime("2009-09-30 20:24:00"))));

Ответ 5

Простота чтения и понимания:

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

Ответ 6

Я всегда добавляю 86400 (секунды в день):

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

Это не самый скользкий способ, которым вы могли бы это сделать, но он работает!

Ответ 7

Это работало для меня:

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

Ответ 8

Пока я согласен с ответом Дага Хэйса, я буду звонить здесь, чтобы сказать, что причина, по которой ваш код не работает, заключается в том, что strtotime() ожидает, что INT является вторым аргументом, а не строкой (даже той, которая представляет дату)

Если вы включите максимальную отчетность об ошибках, вы увидите это как ошибку "Не правильно сформированное числовое значение", которая является уровнем E_NOTICE.

Ответ 9

Следующий код получает первый день января текущего года (но может быть другой датой) и добавляет 365 дней к этому дню (но может быть N дней) с использованием класса DateTime и его метода modify() и format():

echo (new DateTime((new DateTime())->modify('first day of January this year')->format('Y-m-d')))->modify('+365 days')->format('Y-m-d');

Ответ 10

Метод modify(), который можно использовать для добавления приращений к существующему значению DateTime.

Создайте новый объект DateTime с текущей датой и временем:

$due_dt = new DateTime();

Как только у вас есть объект DateTime, вы можете манипулировать его значением, добавляя или вычитая периоды времени:

$due_dt->modify('+1 day');

Подробнее о Руководство по PHP.