У меня есть страница, на которой показаны такие моменты: 10:00am
. Мне нужно взять те времена и добавить один час им. Я придумал регулярное выражение, чтобы разобраться с самим временем, я просто не знаю, что делать дальше. Это регулярное выражение: ^(1[012]|[1-9]):([0-5][0-9])(?i)(am|pm)^
.
Любая помощь будет принята с благодарностью. -Austin
Вы можете сделать что-то вроде этого, не нужно никаких регулярных выражений:
$time = '10:00am'; list($hour, $min) = explode(':', $time); echo date('h:ia', mktime((int)$hour + 1, (int)$min));
Casting to int
избавляется от трейдинга am
так что часть минут может использоваться в mktime
.
Если вам нужно использовать регулярное выражение (например, вы ищете время внутри большей строки), вы можете использовать это:
preg_match('~^(1[012]|[1-9]):([0-5][0-9])(?i)(am|pm)^~', $str, $matches); echo date('h:ia', mktime($match[1] + 1, $match[2]));
И, если вам нужно заменить те времена в исходной строке, вы можете использовать preg_replace_callback
:
$time = preg_replace_callback('~(1[012]|[1-9]):([0-5][0-9])(?i)(am|pm)~', function($matches) { return date('h:ia', mktime($matches[1] + 1, $matches[2])); }, $time);
Версия для PHP 5.2 и старше:
$time = preg_replace_callback('~(1[012]|[1-9]):([0-5][0-9])(?i)(am|pm)~', create_function( '$matches', 'return date(\'h:ia\', mktime($matches[1] + 1, $matches[2]));' }, $time);
Вы также можете использовать этот однострочный: echo date("h:ia", strtotime("10:43am +1 hour"));
, замените 10:43 на интерполированную переменную и убедитесь, что она strtotime()
(ваш примерный формат).
Разделите время на «частичные» переменные, выполните свои модификации и верните детали в новую строку.
Например:
$time = '10:00am'; $time = substr($time, 0, 5); $ampm = substr($time, 6); list($hours, $minutes) = explode(':', $time); // do your thing $newtime = sprintf('%02d:%02d%s', $hours, $minutes, $ampm);