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

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

формат времени даты у меня есть:

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

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

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

может кто-нибудь дать мне пример кода, как мои попытки не кажется меня куда-нибудь?

11 ответов


$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');

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

$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");

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

результат

2011-11-17 05:21:00

Live demo это here

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


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

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

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


Я думал, что это поможет некоторым при работе с часовыми поясами. Мое измененное решение основано на решении @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, является добавление. Надеюсь, это поможет и некоторым людям.


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

// 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')

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

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

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

Как отметили Брэд и немоден в своих ответах выше, 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"); 

использовать 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);

еще один пример функции для этого: (изменение форматов времени и интервалов, как вам нравится, в соответствии с этого для функцию.дата и это для 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;

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

 $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");