Додавання хвилин до часу в PHP


95

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

Формат дати та часу у мене такий:

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

Хвилин для додавання буде лише число від 0 до 59

Я хотів би, щоб результат був таким же, як формат введення з додаванням хвилин.

Хтось може дати мені приклад робочого коду, оскільки мої спроби, здається, нікуди не ведуть?

Відповіді:


176
$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конструктору.


З датою: 18.11.2011 00:00, якщо я додаю 5 хвилин, в результаті я отримую 18.04.2012 00:00. `$ time = new DateTime ($ _ REQUEST ['start']); $ time-> add (новий DateInterval ('P'. $ duration. 'M')); $ endTime = $ time-> format ('Ymd H: i'); echo $ endTime; `Програми для форматування, схоже, сьогодні я теж цього не можу розробити ^ _ ^
— Лука Б

2
Чим DateTime кращий за strtotime?
— bozdoz

11
Що означає "PT"?
— NicholasJohn16,

1
@bozdoz Справа не в тому, який метод "кращий". strtotimeстворює мітку часу Unix як таку, integerщо корисно, якщо ви, наприклад, сортуєте дати у php. DateTimeКлас надає опції для об'єкта і процедурний стиль операцій. Він є більш читабельним, а також має кращу підтримку для обробки відмінностей між різними часовими поясами; наприклад, якщо у вас є проект, який виводить дати для безлічі різних часових поясів, отриманих з того самого екземпляра даних.
— DrewT

1
@ NicholasJohn16 php.net/manual/en/dateinterval.construct.php >> Формат починається з літери P, для "періоду". Кожен період тривалості представлений цілим значенням, за яким слідує позначення періоду. Якщо тривалість містить елементи часу, що частина специфікації передує літера Т.
— Ві

110

Клас DateTime PHP має корисний метод модифікації, який приймає простий для розуміння текст.

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

10
Найкоротший і приємний!

1
Обидві найкращі відповіді чудові і чудово працюють, але я віддаю перевагу цій. Просто здається простішим та інтуїтивнішим.
— Хартлі,

38
$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щоб виявити його велику силу :-)


1
Найрозуміліший
— Навін DA

19

Ви можете легко це зробити за допомогою власних функцій:

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

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


7

Я думав, це допоможе деяким і при роботі з часовими поясами. Моє модифіковане рішення базується на рішенні @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

Трохи пізня відповідь, але я б використав метод:

// 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

Якщо ви хочете вказати змінну, яка містить хвилини.

Тоді я думаю, що це чудовий спосіб цього досягти.

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

2

Використовуйте 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);

2

Я не знаю, чому підхід, встановлений як рішення, для мене не спрацював. Тож я публікую тут те, що працювало для мене, сподіваючись, що це може комусь допомогти:

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

1

Як зазначають Бред та Немоден у своїх відповідях вище, 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

Ще один приклад функції для цього: (змінюючи формат часу та інтервалу, як вам подобається, відповідно до this для 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;


-1

Без використання змінної:

 $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? Що ця відповідь додає до подібних відповідей, опублікованих роками раніше?
— Немає

Шановний @ J.Money $ yourDate означає $ ім'я змінної, і, можливо, моя відповідь буде корисною для когось через 100 років. Не має значення, коли ми повинні відповісти, поки питання не буде закрито. Сподіваюсь, ви зрозумієте і приберете негативне позначення.
— хан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.