Додавання трьох місяців до дати в PHP


88

У мене є змінна під назвою, $effectiveDateщо містить дату 26.03.2012 .

Я намагаюся додати три місяці до цієї дати і не мав успіху в цьому.

Ось те, що я спробував:

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

і

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

Що я роблю не так? Жоден фрагмент коду не працював.


6
Що означає "не спрацювало"?
Джон

2
Я отримую 1340649000відповідь, яка, здається, є правильною.
Догберт

Ви впевнені, що $effectiveDateзберігаєте те, що, на вашу думку, зберігає? Це працює для мене .
Джош

Я чекаю цієї дати на
26.06.2012,

І date('Y-m-d', 1340661600)дає, 2012-06-26що Є правильним.
Tchoupi

Відповіді:


192

Якщо змінити його на такий, ви отримаєте очікуваний формат:

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

Як боротися зі змінною місяців? як $ місяці містить кількість місяців? "+ '$months' months"не працює
HKK

4
$offset = 5; echo date('Y-m-d', strtotime("+$offset months", strtotime('2000-01-01'))); Демо
Cees Timmerman

date () не використовуйте локалізації. Краще strftime ().
user706420

2
Це не працюватиме для таких дат: date ('2018-01-31', strtotime ('+ 3 місяць')). Якщо дата закінчується через 31, а наступні 3 місяці - ні, вона не поверне правильну дату.
Dan H


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;

5

Я припускаю, під "не спрацювало" ви маєте на увазі, що це дає вам позначку часу замість відформатованої дати, тому що ви робили це правильно:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate)); // returns timestamp
echo date('Y-m-d',$effectiveDate); // formatted version

3

Відповідь Чупі можна зробити трохи менш детальною, об'єднавши аргумент для strtotime () наступним чином:

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

(Це спирається на магічні деталі реалізації, але ви завжди можете поглянути на них, якщо ви справедливо недовірливі.)


2

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

Спробуйте це:

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

Це має спрацювати. Мені подобається краще використовувати strftime, оскільки він може бути використаний для локалізації, і ви можете спробувати.


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.