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