В определенных ситуациях я хочу добавить 1 день к значению моей переменной в формате DATETIME:
$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));
Как лучше всего это сделать?
Если вы хотите сделать это в PHP:
// replace time() with the time stamp you want to add one day to
$startDate = time();
date('Y-m-d H:i:s', strtotime('+1 day', $startDate));
Если вы хотите добавить дату в MySQL:
-- replace CURRENT_DATE with the date you want to add one day to
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);
time()
наstrtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}")
.Есть несколько способов сделать это с помощью DateTime, представленного в PHP 5.2. В отличие от использования,
strtotime()
это будет учитывать переход на летнее время и високосный год.$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');
источник
+2 day
или+2 days
(очевидно+2 days
, более семантически правильно)Конструктор DateTime принимает параметр
string time
.$time
могут быть разные вещи, он должен уважать формат datetime .В качестве примеров можно привести несколько допустимых значений:
'now'
(значение по умолчанию)2017-10-19
2017-10-19 11:59:59
2017-10-19 +1day
Итак, в вашем случае вы можете использовать следующее.
$dt = new \DateTime('now +1 day'); //Tomorrow $dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02
источник
strtotime
для преобразования строки в метку временинапример:
$time = strtotime($myInput); $newTime = $time + 86400;
Если он добавляет только 1 день, то снова использовать strtotime, вероятно, будет излишним.
источник
date()
учетом местного часового пояса учитывается переход на летнее время.Ты можешь использовать
$now = new DateTime(); $date = $now->modify('+1 day')->format('Y-m-d H:i:s');
источник
Предлагаю начать использовать классы Zend_Date из Zend Framework . Знаю, немного оффтоп, но мне так понравится :-)
$date = new Zend_Date(); $date->add('24:00:00', Zend_Date::TIMES); print $date->get();
источник
Вы можете использовать следующее.
$start_date = date('Y-m-d H:i:s'); $end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));
Вы также можете установить дни как постоянные и использовать их, как показано ниже.
if (!defined('ADD_DAYS')) define('ADD_DAYS','+3 days'); $end_date = date("Y-m-d 23:59:59", strtotime(ADD_DAYS, strtotime($start_date)));
источник
Использование времени запроса сервера для добавления дней. Работает как положено.
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));
Здесь "+2 дня" можно добавить любое количество дней.
источник
Есть более лаконичный и интуитивно понятный способ добавить дни к дате php. Не поймите меня неправильно, эти выражения php великолепны, но вам всегда нужно искать в Google, как с ними обращаться. Я скучаю по автозаполнению для этого.
Вот как мне нравится обращаться с такими случаями:
(new Future( new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'), new OneDay() )) ->value();
Для меня это более интуитивно понятно, а автозаполнение работает сразу после установки. Не нужно каждый раз искать решение в гугле.
В качестве приятного бонуса вам не нужно беспокоиться о форматировании полученного значения, это уже формат ISO8601.
Это библиотека безе, есть несколько примеров здесь .
источник