WordPress短代码实现:将4位24小时制数字转为12小时制时间
解决方案:将4位24小时制数字转换为带AM/PM的12小时制时间
你可以通过PHP的DateTime类来实现可靠的时间格式转换,替换原有短代码函数即可完成需求。修改后的代码会自动验证输入格式,并精准转换为目标12小时制样式:
function hel_format_time($atts, $content = null) { // 处理嵌套短代码并去除多余空格 $content = do_shortcode(trim($content)); // 验证输入是否为4位数字的24小时制格式 if (!preg_match('/^\d{4}$/', $content)) { return $content; // 输入无效时返回原内容,避免报错 } // 按24小时制解析4位数字为DateTime对象 $timeObj = DateTime::createFromFormat('Hi', $content); // 格式化为无前导零的12小时制,带am/pm标识 return $timeObj->format('g:i a'); } add_shortcode('format-time', 'hel_format_time');
关键逻辑说明:
trim($content):清理输入内容的前后空格,避免格式干扰- 正则验证
/^\d{4}$/:确保输入是标准的4位数字时间(如0900、1830) DateTime::createFromFormat('Hi', $content):H对应24小时制小时(00-23),i对应分钟,完美匹配4位数字的结构format('g:i a'):g输出无前导零的12小时制小时(1-12),i输出分钟,a输出小写的am/pm(若需大写可改用A)
测试示例:
- 输入
[format-time]0900[/format-time]→ 输出9:00 am - 输入
[format-time]1425[/format-time]→ 输出2:25 pm - 输入
[format-time]0000[/format-time]→ 输出12:00 am - 输入
[format-time]2359[/format-time]→ 输出11:59 pm
内容的提问来源于stack exchange,提问作者Michael Wood
相关产品推荐
相关产品推荐

