Muhammad Imran Tariq
Muhammad Imran Tariq

Reputation: 23352

Add minutes to current time

I am trying to add minutes to current date but it returns strange results

date_default_timezone_set('Asia/Karachi');

$currentDate = date("m-d-Y H:i:s");
$currentDate_timestamp = strtotime($currentDate);
$endDate_months = strtotime("+10 minutes", $currentDate_timestamp);
$packageEndDate = date("m-d-Y H:i:s", $endDate_months);

echo " <br> " . $packageEndDate . " <br> ";
echo $currentDate;

I am getting Output

01-01-1970 05:50:00
07-19-2013 20:25:23

It should return

07-19-2013 20:35:23
07-19-2013 20:25:23

After this I need to query to database so date format should be same. Database column is of string type.

Upvotes: 2

Views: 18255

Answers (5)

user4600953
user4600953

Reputation:

Probably the minimalist way would be:

date_default_timezone_set('Asia/Baku');

$packageEndDate = date('Y-m-d H:i:s', strtotime('+10 minute'));
echo $packageEndDate;

Output (Current time in my city at the time of writing):

2017-07-20 12:45:17

Upvotes: 5

nOw2
nOw2

Reputation: 666

Pakistan, which is the localisation explicitly set, uses "DD-MM-YYYY" format dates so the problem occurs when you cast the date into a string of "MM-DD-YYYY". This American format of date is not parseable by the Pakistan localisation.

If you still want to keep the round-trip to a string and back, use DD-MM-YYYY or the ISO datetime format.

While this is the only (current) answer which actually explains your original issue, I recommend the code be refactored as others have demonstrated.

Upvotes: 0

vascowhite
vascowhite

Reputation: 18440

$tenMinsFromNow = (new \DateTime())->add(new \DateInterval('PT10M'));

Will leave you with a DateTime object representing a time 10 minutes in the future. Which will allow you to do something like:-

echo $tenMinsFromNow->format('d/m/Y H:i:s');

See it working

PHP version >= 5.4 I'm afraid, but you should be using at least that version by now anyway.

Upvotes: 0

SasaT
SasaT

Reputation: 731

Try this:

$now = time();
$tenMinFromNow = date("m-d-Y H:i:s", strtotime('+10 minutes', $time));

Upvotes: 0

Marc B
Marc B

Reputation: 360562

Your code is redundant. Why format a timestamp as a string, then convert that string back to a timestamp?

Try

$now = time();
$ten_minutes = $now + (10 * 60);
$startDate = date('m-d-Y H:i:s', $now);
$endDate = date('m-d-Y H:i:s', $ten_minutes);

instead.

Upvotes: 13

Related Questions