如何使用preg_replace将一小时添加到时间值?

时间:2011-03-08 09:33:49

标签: php html regex

我有一个页面,显示时间如下:10:00am。我需要花些时间,给他们加一个小时。我想出了一个正则表达式来处理自己找时间,我只是不知道接下来该做什么。这是我的正则表达式:^(1[012]|[1-9]):([0-5][0-9])(?i)(am|pm)^
任何帮助将不胜感激。 -Austin

3 个答案:

答案 0 :(得分:4)

你也可以使用这个单行:echo date("h:ia", strtotime("10:43am +1 hour"));,用插值变量替换10:43,并确保它可以strtotime()解析(你的示例格式是)。

答案 1 :(得分:2)

你可以这样做,不需要任何正则表达式:

$time = '10:00am';
list($hour, $min) = explode(':', $time);
echo date('h:ia', mktime((int)$hour + 1, (int)$min));

转换为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);

答案 2 :(得分:1)

将时间分解为“部分”变量,执行修改,然后将部分放回新字符串中。

例如:

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