Добавление дней к $Date в PHP

У меня есть дата, возвращаемая как часть запроса mySQL в форме 2010-09-17

Я хотел бы установить переменные $Date2 в $Date5 следующим образом:

$Date2 = $Date + 1

$Date3 = $Date + 2

и т.д..

чтобы он возвращал 2010-09-18, 2010-09-19 и т.д.

Я пробовал

date('Y-m-d', strtotime($Date. ' + 1 day'))

но это дает мне дату ДО $Date.

Каков правильный способ получить мои даты в форме формы "Y-m-d", чтобы они могли использоваться в другом запросе?

Ответ 1

Все, что вам нужно сделать, это использовать days вместо day следующим образом:

<?php
$Date = "2010-09-17";
echo date('Y-m-d', strtotime($Date. ' + 1 days'));
echo date('Y-m-d', strtotime($Date. ' + 2 days'));
?>

И он выводится правильно:

2010-09-18
2010-09-19

Ответ 2

Если вы используете PHP 5.3, вы можете использовать объект DateTime и его add:

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->add(new DateInterval('P1D')); // P1D means a period of 1 day
$Date2 = $date->format('Y-m-d');

Взгляните на страницу руководства DateInterval, чтобы узнать, как создавать другие периоды для добавления к вашей дате (2 дня 'P2D', 3 будет 'P3D' и т.д.).

Без PHP 5.3 вы можете использовать strtotime способ, которым вы это сделали (я протестировал его, и он работает как в версиях 5.1.6, так и в 5.2.10):

$Date1 = '2010-09-17';
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day"));
// var_dump($Date2) returns "2010-09-18"

Ответ 3

Вот небольшой фрагмент, демонстрирующий изменения даты:

$date = date("Y-m-d");
//increment 2 days
$mod_date = strtotime($date."+ 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//decrement 2 days
$mod_date = strtotime($date."- 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 month
$mod_date = strtotime($date."+ 1 months");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 year
$mod_date = strtotime($date."+ 1 years");
echo date("Y-m-d",$mod_date) . "\n";

Ответ 4

Из PHP 5.2 вы можете использовать модификацию с объектом DateTime:

http://php.net/manual/en/datetime.modify.php

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->modify('+1 day');
$Date2 = $date->format('Y-m-d');

Будьте осторожны при добавлении месяцев... (и в меньшей степени, лет)

Ответ 5

Вы также можете использовать следующий формат

strtotime("-3 days", time());
strtotime("+1 day", strtotime($date));

Вы можете складывать изменения таким образом:

strtotime("+1 day", strtotime("+1 year", strtotime($date)));

Обратите внимание на разницу между этим подходом и другим в других ответах: вместо объединения значений +1 day и <timestamp> вы можете просто передать метку времени как второй параметр strtotime.

Ответ 6

Использование переменной для числа дней

$myDate = "2014-01-16";
$nDays = 16;
$newDate = strtotime($myDate . '+ '.$nDays.'days');
echo newDate('d/m/Y', $soma); //format new date 

Ответ 7

Здесь есть простой способ решить эту проблему.

<?php
   $date = "2015-11-17";
   echo date('Y-m-d', strtotime($date. ' + 5 days'));
?>

Выход будет:

2015-11-22

Решение найдено здесь - Как добавить дни до даты в PHP

Ответ 8

Вот простейшее решение для вашего запроса

$date=date_create("2013-03-15");\\or your date string
date_add($date,date_interval_create_from_date_string("40 days"));\\add number of days 
echo date_format($date,"Y-m-d");\\set date format of the result

Ответ 9

Все должны использовать следующий код:

$nday = time() + ( 24 * 60 * 60);    
echo 'Now:       '. date('Y-m-d') ."\n";    
echo 'Next Day: '. date('Y-m-d', $nday) ."\n";