php - добавить переменную за два часа до даты - PullRequest
3 голосов
/ 18 октября 2011

Я хочу добавить 3 минуты к моей переменной даты / времени, но я не уверен, как это сделать. Я сделал переменную из строки, например: (кстати, в формате даты RFC 2822)

$date = 2011-10-18T19:56:00+0200

Я преобразовал эту строку в дату с помощью этой команды:

$time = date_format(DateTime::createFromFormat("Y-m-d\TH:i:sO", $date), "G:i")

Теперь я хотел бы добавить 3 минуты к этой переменной, но я не уверен, как. Ранее я использовал следующую команду в моем сценарии, но она применима к текущей дате / времени, поэтому я не уверен, как использовать ее для моей переменной времени:

$currenttime = date('G:i', strtotime('+2 hours'));

Итак, как я могу добавить три минуты к переменной $ time?

Ответы [ 5 ]

9 голосов
/ 26 сентября 2013
echo $idate="2013-09-25 09:29:44";

$effectiveDate = strtotime("+40 minutes", strtotime($idate));

echo date("Y-m-d h:i:s",$effectiveDate);
5 голосов
/ 18 октября 2011

Поскольку вы уже используете объект DateTime, придерживайтесь его:

$time = DateTime::createFromFormat("Y-m-d\TH:i:sO", $date);
$three_minutes = $time->add(new DateInterval('P2H'));
                                               ^^--two (2) hours (H)
5 голосов
/ 18 октября 2011

Используйте второй параметр strtotime, чтобы указать контрольное время:

$date_rfc2822 = '2011-10-18T19:56:00+0200';
$dateTime = DateTime::createFromFormat("Y-m-d\TH:i:sO", $date_rfc2822);
echo date('G:i', strtotime('+2 hours', $dateTime->getTimestamp()));
1 голос
/ 13 февраля 2013

Формат начинается с буквы P, обозначающей «точка». Каждый период продолжительности представлен целочисленным значением, за которым следует указатель периода. Если длительность содержит элементы времени, этой части спецификации предшествует буква T.

http://www.php.net/manual/en/dateinterval.construct.php

Как говорится, мое решение аналогичной проблемы таково:

// pretend that $date is what you got from mysql
// which is like 2013-02-12 23:08:17
echo "<br>";
echo $date;
$time = DateTime::createFromFormat("Y-m-d H:i:s", $date);
echo "<br>";
echo $time->format('H-i-s');
$time->add(new DateInterval('PT2H'));
echo "<br>";
echo $time->format('H-i-s');
// Outputs:
// 2013-02-12 23:08:17
// 23-08-17
// 01-08-17

Дело в том, чтобы добавить P при использовании класса DateInterval и T перед вводом времени. Для вашего случая вам нужно пойти с PT3M для добавления 3 минуты. Я пытался добавить 2 часа, и то, что я сделал, было $time->add(new DateInterval('PT2H'));.

Если вы посмотрите на спецификации интервала:

Y   years
M   months
D   days
W   weeks. These get converted into days, so can not be combined with D.
H   hours
M   minutes
S   seconds

M для months и M для minutes. Вот почему перед временем стоит T.

По крайней мере, я хочу в это поверить ... 'O_O

0 голосов
/ 19 января 2017
//set the date and time

$start = '2017-01-01 14:00:00';

//display the converted time you want to add for ex. 1 hour and 20 minutes 

echo date('Y-m-d H:i:s',strtotime('+1 hour +20 minutes',strtotime($start)));
...