Добавление объектов к настоящему времени в PHP


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

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

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

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

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

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

11 60

11 ответов:

$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 есть полезное изменить метод, который принимает в простой для понимания текст.

$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);

результат

2011-11-17 05:21:00

видео демка 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')

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

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

$minutes = 10;
$maxAge = new DateTime('2011-11-17 05:05');
$maxAge->modify("+{$minutes} minutes");

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

Я написал функцию, которая возвращает дату в виде строки с дополнительными параметрами:
1.) время: строка / пример: "+5 минут " (по умолчанию = текущее время)
2.) формат: String / ex: "Y-m-d H:i: s" (по умолчанию = " Y-m-d H:i:s О")

очевидно, что это не полноценный метод. Просто быстрая и простая функция для изменения / форматирования текущей даты.

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");