PHP只调用字符串项的一部分

时间:2018-06-08 18:55:20

标签: php

所以我还没有学过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;
}

我做错了什么?

3 个答案:

答案 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