Intereting Posts
php multiple if, если? Как вытащить счетчик данных из веб-сайта для использования в другом проекте HTML в качестве переменной JS Динамически выбирать изображения для слайд-шоу с помощью javascript FOSUser Bundle – запрет входа пользователей в систему Возвращаемое значение эхо-функции PHP vs echo внутри функции Как вызвать функцию контроллера внутри вида в laravel 5 Маршрутная привязка модели и мягкие удаления – Laravel 4 sfValidatorDoctrineUnique не выполняется заглавными буквами Как вызвать конструктор с помощью call_user_func_array в PHP Ошибка файла генерации электронной почты php Как получить доступ к n-му объекту в объекте коллекции Laravel? Laravel или PHP уникальные с несколькими условиями Является ли временная метка в микросекундах всегда уникальной? Как изменить корзину WooCommerce, страницы проверки (основная часть темы) Метод setFont PHP Imagick занимает слишком много времени для выполнения

Как использовать preg_replace, чтобы добавить один час к значению времени?

У меня есть страница, на которой показаны такие моменты: 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);