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


90

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

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

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

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

и

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

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


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, так как его можно использовать для локализации, возможно, вы захотите попробовать.


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)));
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.