Search code examples
phptimercountdown

Countdown timer goes into negative numbers


thank you for your help!

Sorry, my coding experience is very basic and I'm slowly teaching myself. I am confused as to why this countdown when reaching 0 goes into minus numbers and then starts counting up.

AKA, it is currently at -3 minutes and -41 seconds.

I want it to say "NONE" when it reaches 0.

<?
function protectup ($online){
global $time;

$difference=$online-$time;
$num = $difference/86400;
$days = intval($num);
$num2 = ($num - $days)*24;
$hours = intval($num2);
$num3 = ($num2 - $hours)*60;
$mins = intval($num3);
$num4 = ($num3 - $mins)*60;
$secs = intval($num4);

if($days != 0){echo"$days days, ";}
if($hours != 0){echo"$hours hours, ";}
if($mins != 0){echo"$mins minutes and ";}
if($secs != 0) {echo"$secs seconds"; }else{echo"None";}
} ?>

<?=protectup($protect)?>

Thank you for your help!


Solution

  • You can have a left time without second You should add each part with coma and a and for last

    <? 
    
    function protectup ($online) { 
        global $time; 
    
        $difference=$online-$time; 
        if ($difference <= 0) { 
            echo"None\n"; 
            return; 
        } 
        $num = $difference/86400; 
        $days = intval($num); 
        $num2 = ($num - $days)*24; 
        $hours = intval($num2); 
        $num3 = ($num2 - $hours)*60; 
        $mins = intval($num3); 
        $num4 = ($num3 - $mins)*60; 
        $secs = intval($num4); 
    
        $out = array(); 
        if($days != 0){$out[] ="$days days";} 
        if($hours != 0){$out[] = "$hours hours";} 
        if($mins != 0){$out[] = "$mins minutes";} 
        if($secs != 0){$out[] = "$secs seconds";} 
    
        echo $out[0]; 
        for ($i = 1; $i < count($out) - 1; $i++) { 
            echo(", ".$out[$i]); 
        } 
        if (count($out) > 1) { 
            echo(" and ".$out[count($out) - 1]); 
        } 
        echo(".\n"); 
    }   
    
    protectup(123); 
    protectup(120); 
    protectup(124); 
    protectup(184); 
    protectup(424); 
    protectup(345184); 
    protectup(0); 
    protectup(24 * 3600 + 5); 
    protectup(24 * 3600 + 5 * 60); 
    ?> 
    

    output

    2 minutes.
    2 minutes and 3 seconds.
    3 minutes and 4 seconds.
    7 minutes and 3 seconds.
    3 days, 23 hours, 53 minutes and 3 seconds.
    None
    1 days and 5 seconds.
    1 days and 5 minutes.