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


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

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

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

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

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

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

Author: Tim Cooper, 2011-11-17

11 answers

$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');
 116
Author: Tim Cooper, 2011-11-17 15:22:14

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

$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");
 73
Author: Daniel, 2018-04-02 14:46:33
$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 чтобы открыть в себе великую силу:-)

 24
Author: Nemoden, 2011-11-17 14:55:19

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

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

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

 14
Author: Brad, 2011-11-17 14:54:43

Я подумал, что это также поможет некоторым при работе с часовыми поясами. Мое измененное решение основано на решении @Тима Купера, правильном ответе выше.

$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
Author: acarito, 2016-09-21 18:54:03

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

// 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')
 4
Author: Peter, 2015-10-26 08:42:38

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

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

$minutes = 10;
$maxAge = new DateTime('2011-11-17 05:05');
$maxAge->modify("+{$minutes} minutes");
 3
Author: Beaudinn Greve, 2015-01-16 16:27:20

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

Я написал функцию, которая возвращает дату в виде строки с некоторыми необязательными параметрами:
1.) время: Строка | пример: "+5 минут" (по умолчанию = текущее время)
2.) формат: Строка |пример: "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"); 
 1
Author: Robert Schwindaman, 2017-03-16 08:06:40

Использовать 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);
 1
Author: DeathRs, 2017-06-16 03:10:57

Еще один пример функции для этого: (изменение форматов времени и интервалов, как вам нравится, в соответствии с это для функции.дата и это для 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;
 0
Author: FirstFraktal, 2017-05-23 11:54:59

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

 $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");
 0
Author: Wajid khan, 2018-01-13 13:22:04