Я действительно застрял с добавлением X минут в datetime, после большого количества google'ing и ручного чтения PHP я, похоже, ничего не добился.
У меня есть формат даты и времени:
2011-11-17 05:05
: year-month-day hour:minute
Минуты для добавления будут просто числом от 0 до 59.
Я хотел бы, чтобы результат был таким же, как формат ввода с добавленными минутами.
Может ли кто-нибудь дать мне пример рабочего кода, поскольку мои попытки, похоже, ни к чему не приводят?
strtotime
создает временную метку Unix,integer
которая полезна, например, если вы сортируете даты в php.DateTime
Класс предоставляет опции для объекта и процедурный стиль операций. Он более читабелен, а также имеет лучшую поддержку для обработки различий между разными часовыми поясами; например, если у вас есть проект, который выводит даты для множества разных часовых поясов, полученных из одного и того же экземпляра данных.Класс 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");
источник
$newtimestamp = strtotime('2011-11-17 05:05 + 16 minute'); echo date('Y-m-d H:i:s', $newtimestamp);
результат
Живая демонстрация
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')
источник
Я не знаю, почему подход, предложенный в качестве решения, у меня не сработал. Итак, я публикую здесь то, что сработало для меня, в надежде, что это может помочь кому угодно:
$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;
источник
Если вы хотите указать переменную, содержащую минуты.
Тогда я думаю, что это отличный способ добиться этого.
$minutes = 10; $maxAge = new DateTime('2011-11-17 05:05'); $maxAge->modify("+{$minutes} minutes");
источник
Использовать
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);
источник
Как отметили Брэд и Немоден в своих ответах выше, strtotime () - отличная функция. Лично я считаю стандартный объект DateTime слишком сложным для многих случаев использования. Я просто хотел, например, добавить 5 минут к текущему времени.
Я написал функцию, которая возвращает дату в виде строки с некоторыми необязательными параметрами:
1.) time: String | пример: "+5 минут" (по умолчанию = текущее время)
2.) формат: String | например: "Ymd H: i: s" (по умолчанию = "Ymd 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");
источник
Еще один пример функции для этого: (изменение форматов времени и интервалов, как бы они вам ни нравились, в соответствии с этим для function.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;
источник
однострочный формат даты и времени MySQL
$mysql_date_time = (new DateTime())->modify('+15 minutes')->format("Y-m-d H:i:s");
источник
Без использования переменной:
$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");
источник
$yourDate
? Что этот ответ добавляет к аналогичным ответам, опубликованным несколько лет назад?