2010-12-04 5 views
0

Ich habe diesen seltsamen Fehler passiert. Ich füge im Grunde nur ein paar Minuten zu einer Zeit, formatiert wie '12: 20Uhr‘mit der folgenden Funktion ...Time Bug (Mein Skript) PHP

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?? 

Antwort

2

Sie sind nicht etwas zu tun, das am oder Uhr Teil zu erhalten ? Machen Sie sich auch keine Sorgen um den Datumsteil, wenn Sie ihn sowieso nicht verwenden.

Dieser Code ist einfacher und es funktioniert gut:

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); 

Auch ich bin der Name der Funktion nicht sicher, spiegelt wider, was es tut. Sie sollten darüber nachdenken, es zu ändern.

+0

Funktion Name bedeutet beliebige Zeit ... Vielen Dank für Ihre Eingabe berechnen :) –

+0

@Jascha Nun, es ist nicht wirklich willkürlich, wenn Sie die Ausgabe von den Parametern kennen :). Für den Input: Kein Problem, und ich würde dir empfehlen, dir Zeit zu nehmen, ein wenig mit 'strtotime' zu ​​spielen. Ich kann eine echte Zeit sparen, wenn Sie wissen, wie man es benutzt. –

+0

Es ist willkürlich, wenn ich 2 andere Funktionen habe, die bestimmte Zeitstücke hinzufügen. Hin und wieder muss ich ein paar Minuten hinzufügen. Also rufe ich meine Funktion calc_arb_time() auf. –

0

Vielleicht mögen Sie auch auf der DateTime Klasse aussehen:

$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'); 

Drucke:

12:40:00 
13:40:00 
+0

Ich würde gerne dieses verwenden, aber ich bin