Додавання хвилин до часу в 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.