Добавление минут к дате в PHP - PullRequest
71 голосов
/ 17 ноября 2011

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

Формат даты и времени, который у меня естьis:

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

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

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

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

Ответы [ 13 ]

130 голосов
/ 17 ноября 2011
$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.

94 голосов
/ 01 октября 2014

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");
32 голосов
/ 17 ноября 2011
$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, чтобы обнаружить его великую силу: -)

17 голосов
/ 17 ноября 2011

Вы можете легко сделать это с нативными функциями:

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

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

6 голосов
/ 21 сентября 2016

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

4 голосов
/ 26 октября 2015

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

// 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')
3 голосов
/ 16 января 2015

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

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

$minutes = 10;
$maxAge = new DateTime('2011-11-17 05:05');
$maxAge->modify("+{$minutes} minutes");
2 голосов
/ 16 июня 2017

Использование 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 голос
/ 30 апреля 2016

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

Я написал функцию, которая возвращает дату в виде строки с некоторыми необязательными параметрами:
1.) Time: String |например: "+5 минут" (по умолчанию = текущее время)
2.) формат: строка |например: "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"); 
0 голосов
/ 19 июня 2019

Я не знаю, почему подход, предложенный как решение, не работал для меня.Поэтому я публикую здесь то, что сработало для меня, в надежде, что это кому-нибудь поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...