user3655857
user3655857

Reputation: 55

Input a date and give a date in the future

I am letting a user input a date. How should I return a date from their input and add 3 years to it? I tried to use mktime and date but it did not work out very well.

$input_date = 2010-03-28

My solution currently is just basic math for a given date 3 years ahead.

$input_date = $input_date + 3000;

Let's say I would want to give a date 4 years and 4 months 10 days

$future_date1 _datum = mktime(0, 0, 0, date("m")-2, date("d"),   date("Y")+3);
$future_date2 = mktime(0, 0, 0,     date("m"), date("d"),   date("Y")+3);

Upvotes: 0

Views: 92

Answers (3)

John Conde
John Conde

Reputation: 219804

DateTime() offers multiple ways to do this. It's the way PHP recommends doing date math.

You can use DateTime::modify():

$date = new DateTime($input_date);
$date->modify('+3 months');
echo $date->format('Y-m-d');

// one-liner
echo (new DateTime($input_date))->modify('+3 months')->format('Y-m-d');

or with DateInterval()

$date = new DateTime($input_date);
$date->add(new DateInterval('P3M'));
echo $date->format('Y-m-d');

// one-liner
echo (new DateTime($input_date))->add(new DateInterval('P3M'))->format('Y-m-d');

Upvotes: 1

Stefan
Stefan

Reputation: 1258

Use the strtotime function:

$input_date = '2010-03-28';
$future_date = strtotime("+3 years", strtotime($input_date);

http://www.php.net/manual/en/function.strtotime.php

Returns a timestamp, if you want to return YYYY-mm-dd: $future_date = date("Y-m-d", $future_date);

Upvotes: 1

marekful
marekful

Reputation: 15351

You can use strtotime('+ 3 years') or DateInterval for an object oriented approach.

Upvotes: 1

Related Questions