2009-08-17 3 views
51

В некоторых ситуациях я хочу добавить 1 день до значения моего DATETIME отформатированного переменный:добавление 1 день до значения формата DATETIME

$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}")); 

Что такое лучший способ сделать это?

ответ

34

Если вы хотите сделать это в 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); 
+0

wont Это дает мне текущее время? мне все равно нужно, чтобы мое пользовательское время вводилось. – ian

+0

Да, но я отметил вас, какие значения вы должны изменить в пользовательское время. Вы можете просто заменить 'time()' на 'strtotime (" {$ _ GET ['start_hours']}: {$ _ GET ['start_minutes']} {$ _GET ['start_ampm'}} ")'. – RaYell

+0

это не лето-/зимнее время сэкономьте! Пожалуйста, используйте DST save date/time manipulation – steven

8
  1. Использование strtotime для преобразования строки в штамп времени
  2. Добавить к нему день (например: добавив 86400 секунд (24 * 60 * 60))

например:

$time = strtotime($myInput); 
$newTime = $time + 86400; 

Если это только добавление 1 день, а затем с помощью StrToTime снова, вероятно, слишком много.

+0

Итак, мне нужно преобразовать его в TIMESTAMP, а затем обратно в формат DATETIME? – ian

+4

Думаю, следует также отметить, что не каждый день длится 24 часа. В большинстве мест в мире летнее время (летнее время) означает, что один день в году составляет всего 23 часа, а еще один день - 25 часов. – nickf

1

Предлагаю начать с Zend_Date классов из Zend Framework. Я знаю, его немного оффтоп, но я люблю этот путь :-)

$date = new Zend_Date(); 
$date->add('24:00:00', Zend_Date::TIMES); 
print $date->get(); 
151

Там больше чем один способ сделать это с 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'); 
+0

Ах, петля петли * *. –

+5

Если вы добавляете более одного дня, вы можете использовать множественное или единственное число и получить тот же результат, например.: '+2 день' или' +2 дня' (очевидно, '+2 дня' более семантически корректны) – timhc22

+0

Каковы практические различия между этими методами? Первый пример кажется самым простым и самым смысловым для меня. – BadHorsie

9

DateTime конструктор принимает параметр string time. $time могут быть разные вещи, он должен уважать datetime format.

Есть некоторые допустимые значения в качестве примеров:

  • '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 
+3

Ответ без объяснения причин? Прочитайте [Как написать хороший ответ?] (Http://stackoverflow.com/help/how-to-answer) – Shashanth

Смежные вопросы