所以我还没有学过PHP,但我们通常为我们网站编写功能的人很忙。所以我试图用非常有限的知识来解决这个问题。我需要将4位军队时间(0800,0815,0830,0845,0900 ......)转换为标准时间(上午8:00,上午8:15,......)。我写了一个等式,但它的所有小时数都是12,而且总是PM。这是我的等式......
function convert_army_to_regular($time) {
$hours = substr($time, 0, 1);
$minutes = substr($time, 2, 3);
if ($hours > 12) {
$hours = $hours - 12;
$ampm = 'PM';
} else if ($hours = 12) {
$ampm = 'PM';
} else {
if ($hours < 11){
$ampm = 'AM';
}
}
return $hours . ':' . $minutes . $ampm;
}
我做错了什么?
答案 0 :(得分:1)
只需使用date
从军事转换为标准时间:
$armyTime = "2300";
$time_in_12_hour_format = date("g:i a", strtotime($armyTime));
echo $time_in_12_hour_format;
结果:晚上11点
答案 1 :(得分:1)
您的代码存在两个问题,=
是一项任务。您需要使用==
进行比较(或===
也可以,它也可以检查类型。)
第二个问题是substr
。该函数将位置作为参数1开始,将字符数提前为2.因此,在两个示例中,您的第二个参数应为2。
$hours = substr($time, 0, 2);
$minutes = substr($time, 2, 2);
您也可以将其投放到int
,如果小于10,则会删除前导0
。
$hours = (int)substr($time, 0, 2);
您也可以使用正则表达式执行此操作:
echo preg_replace_callback('/(\d{2})(\d{2})/', function($match) {
$hours = (int)$match[1];
$minutes = $match[2];
$median = 'AM';
if($hours > 12 ) {
$hours = $hours - 12;
$median = 'PM';
}
return $hours . ':' . $minutes . $median;
},'1800');
答案 2 :(得分:0)
更容易利用strtotime功能和日期。
$stime = '0830';
echo date("g:ia", strtotime($stime));
导致上午8:30