【发布时间】:2011-03-08 09:33:48
【问题描述】:
我有一个页面显示时间如下:10:00am。我需要花些时间,然后再增加一小时。我想出了一个正则表达式来处理自己查找时间,我只是不知道下一步该做什么。这是我的正则表达式:^(1[012]|[1-9]):([0-5][0-9])(?i)(am|pm)^.
任何帮助将不胜感激。 -奥斯汀
【问题讨论】:
我有一个页面显示时间如下:10:00am。我需要花些时间,然后再增加一小时。我想出了一个正则表达式来处理自己查找时间,我只是不知道下一步该做什么。这是我的正则表达式:^(1[012]|[1-9]):([0-5][0-9])(?i)(am|pm)^.
任何帮助将不胜感激。 -奥斯汀
【问题讨论】:
您也可以使用这个单行代码:echo date("h:ia", strtotime("10:43am +1 hour"));,将 10:43 替换为一个插值变量,并确保它可以被 strtotime() 解析(您的示例格式是)。
【讨论】:
你可以这样做,不需要任何正则表达式:
$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);
【讨论】:
create_function() 而不是普通函数。以查看preg_replace_callback 的 PHP 手册为例。
create_function 的版本。
将时间解析为“部分”变量,执行修改,然后将部分放回新字符串中。
例如:
$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);
【讨论】: