时间错误(我的脚本)PHP

时间:2010-12-04 18:53:58

标签: php date strtotime

我发现了这个奇怪的错误。我基本上只是添加几分钟到格式为'12:20pm'的时间,具有以下功能...

function calc_arb_time($startTime, $amount){
        $startTime = date('Y-m-d') . substr($startTime,0,-2);
        $startTime = strtotime($startTime);


        $seconds = $amount*60;
        $startTime += $seconds;
        $newStartTime = date('g:ia', $startTime);
        return($newStartTime);
    }

echo calc_arb_time('12:20pm',20); // <-- this returns 12:40pm which is great

echo calc_arb_time('1:20pm',20); // this returns 1:40am... Why the AM??

2 个答案:

答案 0 :(得分:2)

你没有做任何事情来保护 am pm 部分?如果您不打算使用它,也不要担心日期部分。

此代码更简单,工作正常:

function calc_arb_time($startTime, $amount){
    $startTime = strtotime('+'.$amount.' minutes', strtotime($startTime));
    return date('g:ia', $startTime);
}
echo calc_arb_time('12:20pm',20).PHP_EOL;
echo calc_arb_time('1:20pm',20);

此外,我不确定该功能的名称是否反映了它的作用。你应该考虑改变它。

答案 1 :(得分:0)

您可能还想查看DateTime类:

$date = DateTime::createFromFormat('g:ia', '12:20pm');
$date->add(new DateInterval('PT20M'));
echo $date->format('H:i:s');

$date = DateTime::createFromFormat('g:ia', '1:20pm');
$date->add(new DateInterval('PT20M'));
echo $date->format('H:i:s');

打印:

12:40:00
13:40:00