Подтвердить что ты не робот

Добавление минут к дате времени в PHP

Я действительно застрял в добавлении X минут в datetime, после большого количества ручного чтения google'ing и PHP, похоже, я ничего не получаю.

Формат даты, который у меня есть:

2011-11-17 05:05: year-month-day hour:minute

Минуты для добавления будут просто числом от 0 до 59

Я хотел бы, чтобы результат был таким же, как формат ввода с добавленными минутами.

Может ли кто-нибудь дать мне пример рабочего кода, так как мои попытки, похоже, не приводят меня нигде?

4b9b3361

Ответ 1

$minutes_to_add = 5;

$time = new DateTime('2011-11-17 05:05');
$time->add(new DateInterval('PT' . $minutes_to_add . 'M'));

$stamp = $time->format('Y-m-d H:i');

Стандарт ISO 8601 для длительности представляет собой строку в виде P{y}Y{m1}M{d}DT{h}H{m2}M{s}S где части {*} заменяются числовым значением показывая, как долго продолжительность.

Например, P1Y2DT5S означает 1 год, 2 дня и 5 секунд.

В приведенном выше примере мы предоставляем PT5M (или 5 минут) конструктору DateInterval.

Ответ 2

Класс PHP DateTime имеет полезный метод модификации, который воспринимает простой для понимания текст.

$dateTime = new DateTime('2011-11-17 05:05');
$dateTime->modify('+5 minutes');

Вы также можете использовать интерполяцию или конкатенацию строк для ее параметризации:

$dateTime = new DateTime('2011-11-17 05:05');
$minutesToAdd = 5;
$dateTime->modify("+{$minutesToAdd} minutes");

Ответ 3

$newtimestamp = strtotime('2011-11-17 05:05 + 16 minute');
echo date('Y-m-d H:i:s', $newtimestamp);

результат

2011-11-17 05:21:00

Живая демонстрация here

Если вы еще не знакомы с strtotime, вам лучше перейти на php.net, чтобы открыть для себя большую силу: -)

Ответ 4

Вы можете сделать это с помощью собственных функций:

strtotime('+59 minutes', strtotime('2011-11-17 05:05'));

Я бы рекомендовал метод класса DateTime, но только что отправил Tim.

Ответ 5

Я думал, что это поможет кому-то в работе с часовыми поясами. Мое модифицированное решение основано на решении @Tim Cooper, правильный ответ выше.

$minutes_to_add = 10;
$time = new DateTime();
**$time->setTimezone(new DateTimeZone('America/Toronto'));**
$time->add(new DateInterval('PT' . $minutes_to_add . 'M'));
$timestamp = $time->format("Y/m/d G:i:s");

Полужирная строка, строка 3, является добавлением. Надеюсь, это поможет некоторым людям.

Ответ 6

Немного позднего ответа, но метод, который я использовал бы:

// Create a new \DateTime instance
$date = DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-26 10:00:00');

// Modify the date
$date->modify('+5 minutes');

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

Или в PHP >= 5.4

echo (DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-26 10:00:00'))->modify('+5 minutes')->format('Y-m-d H:i:s')

Ответ 7

Если вы хотите указать переменную, содержащую минуты.

Тогда я думаю, что это отличный способ добиться этого.

$minutes = 10;
$maxAge = new DateTime('2011-11-17 05:05');
$maxAge->modify("+{$minutes} minutes");

Ответ 8

Используйте strtotime("+5 minute", $date);


Пример:
$date = "2017-06-16 08:40:00";
$date = strtotime($date);
$date = strtotime("+5 minute", $date);
echo date('Y-m-d H:i:s', $date);

Ответ 9

Как отмечено Брэдом и Немоденом в своих ответах выше, strtotime() - отличная функция. Лично я обнаружил, что стандартный объект DateTime слишком сложный для многих случаев использования. Например, я просто хотел добавить 5 минут к текущему времени.

Я написал функцию, которая возвращает дату в виде строки с некоторыми необязательными параметрами:
1.) время: String | ex: "+5 минут" (по умолчанию = текущее время)
2.) формат: String | ex: "Y-m-d H: i: s" (по умолчанию = "Y-m-d H: i: s O" )

Очевидно, что это не полностью признанный метод. Просто быстрая и простая функция для изменения/форматирования текущей даты.

function get_date($time=null, $format='Y-m-d H:i:s O')
{
    if(empty($time))return date($format);
    return date($format, strtotime($time));
}

// Example #1: Return current date in default format
$date = get_date(); 

// Example #2: Add 5 minutes to the current date
$date = get_date("+5 minutes"); 

// Example #3: Subtract 30 days from the current date & format as 'Y-m-d H:i:s'
$date = get_date("-30 days", "Y-m-d H:i:s"); 

Ответ 10

Еще один пример функции для этого: (изменение формата времени и интервала, но вам нравится их в соответствии с this for function.date, и this для DateInterval):

(Я также написал альтернативную форму ниже).

// Return adjusted time.

function addMinutesToTime( $dateTime, $plusMinutes ) {

    $dateTime = DateTime::createFromFormat( 'Y-m-d H:i', $dateTime );
    $dateTime->add( new DateInterval( 'PT' . ( (integer) $plusMinutes ) . 'M' ) );
    $newTime = $dateTime->format( 'Y-m-d H:i' );

    return $newTime;
}

$adjustedTime = addMinutesToTime( '2011-11-17 05:05', 59 );

echo '<h1>Adjusted Time: ' . $adjustedTime . '</h1>' . PHP_EOL . PHP_EOL;

Ответ 11

Без использования переменной:

 $yourDate->modify("15 minutes");
 echo $yourDate->format( "Y-m-d H:i");

С использованием переменной:

 $interval= 15;
 $yourDate->modify("+{$interval } minutes");  
 echo $yourDate->format( "Y-m-d H:i");

Ответ 12

однострочный формат даты/времени mysql

$mysql_date_time = (new DateTime())->modify('+15 minutes')->format("Y-m-d H:i:s");

Ответ 13

Я не знаю, почему подход, предложенный как решение, не работал для меня. Поэтому я публикую здесь то, что сработало для меня, в надежде, что это может кому-нибудь помочь

$startTime = date("Y-m-d H:i:s");

//display the starting time
echo '> '.$startTime . "<br>";

//adding 2 minutes
$convertedTime = date('Y-m-d H:i:s', strtotime('+2 minutes', strtotime($startTime)));

//display the converted time
echo '> '.$convertedTime;