Добавление минут к дате времени в PHP
Я действительно застрял в добавлении X минут в datetime, после большого количества ручного чтения google'ing и PHP, похоже, я ничего не получаю.
Формат даты, который у меня есть:
2011-11-17 05:05
: year-month-day hour:minute
Минуты для добавления будут просто числом от 0 до 59
Я хотел бы, чтобы результат был таким же, как формат ввода с добавленными минутами.
Может ли кто-нибудь дать мне пример рабочего кода, так как мои попытки, похоже, не приводят меня нигде?
Ответы
Ответ 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;