Добавление трех месяцев к дате в PHP

90

У меня есть переменная, $effectiveDateсодержащая дату 2012-03-26 .

Я пытаюсь добавить три месяца к этой дате, но мне это не удалось.

Вот что я пробовал:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));

и

$effectiveDate = strtotime(date("Y-m-d", strtotime($effectiveDate)) . "+3 months");

Что я делаю неправильно? Ни один из фрагментов кода не работал.

user979331
источник
6
Что значит «не сработало»?
Jon
2
Я получаю 1340649000ответ, который кажется правильным.
Dogbert
Вы уверены, что $effectiveDateхраните то, что думаете? У меня работает .
Джош
Я ожидаю эту дату до 26.06.2012, добавив 3 месяца к
26.03.2012
И date('Y-m-d', 1340661600)дает 2012-06-26правильный ответ.
Tchoupi

Ответы:

196

Измените его на это, чтобы получить ожидаемый формат:

$effectiveDate = date('Y-m-d', strtotime("+3 months", strtotime($effectiveDate)));
Чупи
источник
Как работать с переменной месяцев? как $ months содержит количество месяцев? "+ '$months' months"не работает
HKK
4
$offset = 5; echo date('Y-m-d', strtotime("+$offset months", strtotime('2000-01-01'))); Демо
Cees Timmerman
date () не используют локализации. Лучше strftime ().
user706420 04
2
Это не работает для таких дат: date ('2018-01-31', strtotime ('+ 3 month')). Если дата заканчивается 31, а следующие 3 месяца - нет, правильная дата не возвращается.
Dan H
3
не
лучшее
17

Это не совсем ответ на этот вопрос. Но я добавлю это, поскольку этот вопрос все еще доступен для поиска, как добавить / вычесть период из даты.

$date = new DateTime('now');
$date->modify('+3 month'); // or you can use '-90 day' for deduct
$date = $date->format('Y-m-d h:i:s');
echo $date;
Сади
источник
6

Я предполагаю, что под «не сработало» вы имеете в виду, что он дает вам отметку времени вместо отформатированной даты, потому что вы делали это правильно:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate)); // returns timestamp
echo date('Y-m-d',$effectiveDate); // formatted version
Ник
источник
3

Вам нужно преобразовать дату в читаемое значение. Вы можете использовать strftime () или date ().

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

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));
$effectiveDate = strftime ( '%Y-%m-%d' , $effectiveDate );
echo $effectiveDate;

Это должно сработать. Мне больше нравится использовать strftime, так как его можно использовать для локализации, возможно, вы захотите попробовать.

JohnnyQ
источник
2

Ответ Чупи можно сделать немного менее подробным, объединив аргумент для strtotime () следующим образом:

$effectiveDate = date('Y-m-d', strtotime($effectiveDate . "+3 months") );

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

веселье
источник
2

Следующее должно работать, попробуйте это:

$effectiveDate = strtotime("+1 months", strtotime(date("y-m-d")));
echo $time = date("y/m/d", $effectiveDate);
Дипак Кукадия
источник
1

Следующее должно работать

$d = strtotime("+1 months",strtotime("2015-05-25"));
echo   date("Y-m-d",$d); // This will print **2015-06-25** 
Рики
источник
1

Добавьте n дней, месяцев и лет

$n = 2;
for ($i = 0; $i <= $n; $i++){
    $d = strtotime("$i days");
    $x = strtotime("$i month");
    $y = strtotime("$i year");
    echo "Dates : ".$dates = date('d M Y', "+$d days");
    echo "<br>";
    echo "Months : ".$months = date('M Y', "+$x months");
    echo '<br>';
    echo "Years : ".$years = date('Y', "+$y years");
    echo '<br>';
}
Рахул Ганди
источник
0

Следующее должно работать, но вам может потребоваться изменить формат:

echo date('l F jS, Y (m-d-Y)', strtotime('+3 months', strtotime($DateToAdjust)));
Брендон Дуган
источник