Добавление минут к времени даты в PHP
Я действительно застрял с добавлением X минут к дате и времени, после того, как я много читал в Google и PHP вручную, я, похоже, никуда не продвинулся.
У меня есть формат даты и времени:
2011-11-17 05:05
: year-month-day hour:minute
Добавляемые минуты будут просто числом от 0 до 59
Я бы хотел, чтобы выходные данные были такими же, как формат ввода с добавлением минут.
Не мог бы кто-нибудь привести мне пример рабочего кода, так как мои попытки, похоже, меня не устраивают куда угодно?
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');
Класс 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");
Вы можете легко сделать это с помощью собственных функций:
strtotime('+59 minutes', strtotime('2011-11-17 05:05'));
Я бы рекомендовал метод класса DateTime, только что опубликованный Тимом.
Я подумал, что это также поможет некоторым при работе с часовыми поясами. Мое измененное решение основано на решении @Тима Купера, правильном ответе выше.
$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.) время: Строка | пример: "+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");
Использовать 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");