Cuenta atras en PHP

Hoy me apetecía escribir en el blog xD, y en vez de dejarme cosas para días que no tenga nada que contar, voy a pegar aquí un pequeño script en php para que veáis como podéis hacer una cuenta atrás, o un contador de tiempo hacia delante con las funciones de tiempo que nos ofrece php.

function countdown($hor,$min,$seg,$mes,$dia,$ano) {
//mktime(hora, min, seg , mes, dia, anyo)
$final_day= mktime($hor,$min,$seg,$mes,$dia,$ano); //Calculamos la fecha unix del dia final
$hoy_exed = time(); //Calculamos la fecha unix de hoy
if ($final_day > $hoy_exed) //Si la fecha final es mayor a la de hoy
{
$remaining = $final_day – $hoy_day; //Averiguamos cuantos segundos quedan para el dia d y hora h
$hora = $remaining/3600; //Dividimos los segundos entre 3600 para obtener las horas que quedan.
$minx = explode(“.”,$hora); //Extraemos parte entera y decimal
$min = (“0.”.$minx[1]) * 60; //Multiplicamos por 60 para saber cuantos minutos quedan
$segx = explode(“.”,$min); //Extraemos parte entera y decimal
$segd = (“0.”.$segx[1]) * 60; //Multiplicamos por 60 para saber cuantos segundos quedan.
$seg = explode(“.”,$segd); //Desechamos parte decimal
return “$minx[0]h:$segx[0]m:$seg[0]s”; //Devolvemos un string formateado con lo que queda.
}
else
{
return “Fin”;
}
}

Lee el resto de la entrada para ver la explicacion

He creado una funcion para poder reutilizar el codigo. Principalmente hacemos uso de las funciones time() y mktime().
Time es una función que devuelve la fecha actual en Epoch Unix (esto significa que nos devolverá la cantidad de segundos que han pasado desde el 1 de Enero de 1970) y mktime es otra función que nos devuelve la fecha que le pasemos por argumento en Epoch Unix (Osea en segundos desde el 1 de Enero de 1970).

Entonces para hacer la cuenta atras, calculamos la fecha del día y hora en la que termina la cuenta atras con mktime():
Ej para el 24 de Febrero del 2008 a las 16:30:
mktime(16, 30, 0 , 2, 24, 2008)
y nos devolvera 1203867000 que es como decir 24/02/2008 a las 16:30:00.
y ahora calculamos el dia de hoy a esta hora simplemente con time()
Ej para hoy 12 de Octubre del 2007 sobre las 21:41 aproximadamente.
time()
Y devuelve 1192218126. Entonces teniendo las fechas simplemente tenemos que restar para saber cuantos segundos faltan:
1203867000 – 1192218126 = 11648874 (Si no me he equivocado xD)
Pues quedan 11648874 segundos para que me pueda sacar el carnet B :D pero dicho así no queda muy bonito.
Para eso simplemente tenemos que dividirlo para obtener minutos, segundos o lo que queramos.
Por Ejemplo:
echo (mktime(16, 30, 0, 2, 24, 2008) - time()) / (3600*24);
Eso nos devuelve un numero (con decimales) que nos indica los dias que quedan para que me saque el carnet B :D

PD: El codigo de arriba del todo, la función completa, puede que no funcione correctamente, la escribi hace mucho tiempo y ahora no encuentro donde falla, pero antes iba bastante bien.

Advertisement

1 comentario hasta ahora

  1. Eduardo Martin Diaz on

    bueno, paseando por aki me encontre el codigo, dijistes que no funcionaba, corregi las faltas aunq no lo probe, ahora no da errores de sintaxis, por si sirve de algo, aqui tienes.

    function countdown($hor,$min,$seg,$mes,$dia,$ano) {
    //mktime(hora, min, seg , mes, dia, anyo)
    $final_day= mktime($hor,$min,$seg,$mes,$dia,$ano); //Calculamos la fecha unix del dia final
    $hoy_exed = time(); //Calculamos la fecha unix de hoy
    if ( $final_day > $hoy_exed ){

    $remaining = $final_day – $hoy_day ;

    $hora = $remaining / 3600; //Dividimos los segundos entre 3600 para obtener las horas que quedan.
    $minx = explode(“.”,$hora); //Extraemos parte entera y decimal
    $min = (“0.”.$minx[1]) * 60; //Multiplicamos por 60 para saber cuantos minutos quedan
    $segx = explode(“.”,$min); //Extraemos parte entera y decimal
    $segd = (“0.”.$segx[1]) * 60; //Multiplicamos por 60 para saber cuantos segundos quedan.
    $seg = explode(“.”,$segd); //Desechamos parte decimal
    return $minx[0].”h : ” .$segx[0].” m : “. $seg[0].”s”; //Devolvemos un string formateado con lo que queda.
    }
    else
    {
    return “Fin”;
    }
    }


Deja un comentario

Please log in using one of these methods to post your comment:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.