Добавление 30 минут ко времени, отформатированному как H:i в PHP

Наличие кошмара в данный момент и просто не видит, почему оно не работает

У меня есть значение в форме H:i (т.е. 10:00, 13:30) и т.д. названный $time

То, что я хочу сделать, создают две новой стоимости, $startTime, который составляет 30 минут прежде чем $time и $endTime, который составляет 30 минут после $time

Я попробовал следующее, но просто, кажется, не хочет работать

$startTime = date("H:i",strtotime('-30 minutes',$time));
$endTime = date("H:i",strtotime('+30 minutes',$time));

Если я прохожу через 10:00 как через $time и повторяю и $startTime и $endTime, я добираюсь:

$startTime = 00:30
$startTime = 01:30        
39
задан bateman_ap 4 May 2010 в 16:24
поделиться

4 ответа

$time = strtotime('10:00');
$startTime = date("H:i", strtotime('-30 minutes', $time));
$endTime = date("H:i", strtotime('+30 minutes', $time));
89
ответ дан 27 November 2019 в 02:13
поделиться

Я обычно использую немного другой способ:

$startTime = date("H:i",time() - 1800);
$endTime = date("H:i",time() + 1800);

Где 1800 секунд = 30 минут.

4
ответ дан 27 November 2019 в 02:13
поделиться

Ваше текущее решение не работает, потому что $time является строкой - это должна быть временная метка Unix. Вместо этого вы можете сделать следующее:

$unix_time = strtotime('January 1 2010 '.$time); // create a unix timestamp
$startTime date( "H:i", strtotime('-30 minutes', $unix_time) );
$endTime date( "H:i", strtotime('+30 minutes', $unix_time) );
1
ответ дан 27 November 2019 в 02:13
поделиться

Чтобы это сработало, $time должен быть меткой времени. Вы не можете передать "10:00" или что-то вроде $time = date('H:i', '10:00'); что вы, похоже, и делаете, потому что тогда я получаю результаты 0:30 и 1:30.

Попробуйте

$time = strtotime('10:00');

В качестве альтернативы используйте DateTime (нижеприведенный вариант требует PHP 5.3, хотя):

$dt = DateTime::createFromFormat('H:i', '10:00'); // create today 10 o'clock
$dt->sub(new DateInterval('PT30M'));              // substract 30 minutes
echo $dt->format('H:i');                          // echo modified time
$dt->add(new DateInterval('PT1H'));               // add 1 hour
echo $dt->format('H:i');                          // echo modified time

или процедурный, если вам не нравится ООП

$dateTime = date_create_from_format('H:i', '10:00');
date_sub($dateTime, date_interval_create_from_date_string('30 minutes'));
echo date_format($dateTime, 'H:i');
date_add($dateTime, date_interval_create_from_date_string('1 hour'));
echo date_format($dateTime, 'H:i');
10
ответ дан 27 November 2019 в 02:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: