Мой код для добавления одного дня к дате возвращает дату до дня добавления:
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;
?>
Я использовал довольно похожий код раньше, что я здесь делаю не так?
date('Y-m-d H:i:s', strtotime($stop_date . ' + 1 day'));
как в ответе, который дал вам @ w35l3y.источник
Самое простое решение:
источник
echo (new DateTime('+1 day'))->format('Y-m-d H:i:s');
Unexpected T_OBJECT_OPERATOR” error in PHP
Это сработало для меня: на текущую дату
для любой даты:
источник
strtotime()
- он может обрабатывать все за один вызов:date('Y-m-d', strtotime($date . " +1 day"));
Попробуй это
источник
Простой для чтения и понимания способ:
источник
Я всегда просто добавляю 86400 (секунд в день):
Это не самый лучший способ, которым вы могли бы это сделать, но это работает!
источник
Хотя я согласен с ответом Дуга Хейса, я перезвоню здесь, чтобы сказать, что причина, по которой ваш код не работает, заключается в том, что strtotime () ожидает INT как второй аргумент, а не строку (даже тот, который представляет дату)
Если вы включите максимальное сообщение об ошибке, вы увидите это как ошибку «Не правильно сформированное числовое значение», которая является уровнем E_NOTICE.
источник
modify()
Метод , который может быть использован для добавления приращения к существующемуDateTime
значению.Создайте новый
DateTime
объект с текущей датой и временем:Получив
DateTime
объект, вы можете манипулировать его значением, добавляя или вычитая периоды времени:Вы можете прочитать больше в руководстве по PHP .
источник
Следующий код получает первый день января текущего года (но это может быть другая дата) и добавляет к этому дню 365 дней (но может быть и N дней), используя класс DateTime и его метод modify () и format ( ):
источник
Поскольку у вас уже есть ответ на вопрос, что не так с вашим кодом, я могу рассказать о том, как вы можете работать с датами в целом, и конкретно решить вашу проблему.
Часто вы сталкиваетесь с проблемой с точки зрения решения. Это только одна из причин, по которой вы получаете императивный код. Это здорово, если это работает, хотя; Есть только другие, возможно, более приемлемые альтернативы. Одним из них является декларативный код. Дело в том, что вам нужно, а не как туда добраться.
В вашем конкретном случае это может выглядеть следующим образом. Во-первых, вам нужно выяснить, что именно вы ищете, то есть открыть абстракции. В вашем случае, похоже, вам нужно свидание . Не просто любая дата, а та, которая имеет какое-то стандартное представление. Скажем, дата ISO8601. Существует как минимум две реализации: первая - это дата, проанализированная из строки в формате ISO8601 (или фактически строки в любом другом формате), а вторая - какая-то будущая дата, которая будет днем позже. Таким образом, весь код может выглядеть так:
Для большего количества примеров с манипулированием датой и временем проверьте этот .
источник