2010-12-04 23 views
0

J'ai ce bug étrange qui se passe. Je suis fondamentalement juste ajouter quelques minutes à une heure formatée comme '12: 20 um » avec la fonction suivante ...Time Bug (Mon script) 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?? 

Répondre

2

Vous ne faites rien pour préserver la am ou pm partie ? Ne vous inquiétez pas non plus de la partie date si vous ne l'utilisez pas de toute façon.

Ce code est plus simple et cela fonctionne très bien:

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

Aussi je ne suis pas sûr que le nom de la fonction reflète ce qu'il fait. Vous devriez envisager de le changer.

+0

signifie calculer le temps arbitraire ... merci pour vos commentaires :) –

+0

@Jascha Eh bien, ce n'est pas vraiment arbitraire si vous connaissez la sortie des paramètres :). Pour l'entrée: Pas de problème, et je vous recommande de prendre le temps de jouer un peu avec 'strtotime'. Je peux économiser beaucoup de temps si vous savez comment l'utiliser. –

+0

Il est arbitraire quand j'ai 2 autres fonctions ajoutant des bits de temps spécifiques. De temps en temps, je dois ajouter quelques minutes arbitraires. J'appelle donc ma fonction calc_arb_time(). –

0

Vous pouvez également regarder la DateTime classe:

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

Prints:

12:40:00 
13:40:00 
nom de la fonction
+0

J'adorerais utiliser celui-ci mais je suis