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


Мой код для добавления одного дня к дате возвращает дату до добавления дня: 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;
?>

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

Author: Shoaib Quraishi, 2009-09-08

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

Для 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');
 247
Author: w35l3y, 2015-07-04 14:29:43
$date = new DateTime('2000-12-31');

$date->modify('+1 day');
echo $date->format('Y-m-d') . "\n";
 74
Author: Prasanth Bendra, 2017-02-17 10:24:13

Простейшее решение:

$date = new DateTime('+1 day');
echo $date->format('Y-m-d H:i:s');
 24
Author: minlare, 2015-03-19 10:22:04

Это сработало для меня: На Текущую дату

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

Для любой даты:

date('Y-m-d', strtotime("+1 day", strtotime($date)));
 10
Author: Jay Momaya, 2018-01-29 11:17:00

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

echo date('Y-m-d H:i:s',date(strtotime("+1 day", strtotime("2009-09-30 20:24:00"))));
 6
Author: user1987095, 2013-12-30 14:30:16

Простой для чтения и понимания способ:

$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;
 5
Author: joan16v, 2015-02-18 12:28:51

Я всегда просто добавляю 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; 

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

 2
Author: Doug Hays, 2009-09-08 15:58:12

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

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

 1
Author: Peter Bailey, 2009-09-08 16:03:58

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

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

$due_dt = new DateTime();

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

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

Вы можете прочитать больше в Руководстве по PHP.

 1
Author: Kal, 2017-10-07 01:57:50

Следующий код получает первый день января текущего года (но это может быть другая дата) и добавляет 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');
 0
Author: Carlos Espinoza, 2016-11-06 00:06:45