Sep
04

Timestamp, php y algo de lógica

Uno de mis grandes problemas desde siempre, ha sido, manejar fechas. Se que PHP tiene funciones y tocho morócho, peeero de todas formas nunca me sale nada del resultado esperado y termino haciendo lo que Dios me da entender jeje... o sea un cochinero de código.

Convirtiendo las fechas ya es algo en lo que me defiendo mas o menos, pero si se trata de meterme a manejar las horas, minutos o segundos... ¡puff! Ya me hicieron bailar otra vez :-S

Por eso, para evitar problemitas tengo mis formulitas. Aclaro que no se si exista otro método mas fácil para solucionar todo este cuchitril.

  1. Horas a Minutos

  2. Horas a Segundos

  3. Minutos a Horas

  4. Minutos a Segundos

  5. Segundos a Minutos

  6. Segundos a Horas

En base a todo este cochinero espero y algún alma bondadosa se apiade de la mia, y diga, Victor estás haciendo puras tonterias ¡Así no se hace!.. Se hace así… bla bla bla. :-)

De Horas a Minutos

Minutos = Horas x 60

< ?

//Horas a minutos

$horas=2;

$minutos=$horas*60;

echo$minutos;//120

?>

De Horas a Segundos

Segundos = Horas x 3600

< ?

//horas a segundos

$horas=2;

$segundos = $horas*3600;//$horas*(60*60);

echo$segundos;//7200

?>

De Minutos a Horas

Horas = Redondear fraccion hacia abajo (Minutos/60)

Minutos = residuo de Minutos / 60

< ?

//De Minutos a Horas

$minutos=121;

$horas=floor($minutos/60);//2

$minutos=$minutos%60;//0

echo “$horas:$minutos”;

?>

De Minutos a Segundos

Minutos = Horas x 60

< ?

//De Minutos a Segundos

$minutos=121;

$segundos=$minutos*60;//7260

echo $segundos;

?>

De Segundos a Horas

Horas = Redondear fraccion hacia abajo o (Segundos/3600)

Minutos = Redondear fraccion hacia abajo ((Residuo de (Segundos / 3600))/60)

Segundos = Residuo de (Segundos/60)

< ?

//De Segundos a Horas

$segundos=7261;

$horas=floor($segundos/3600);

$minutos=floor(($segundos%3600)/60);//1

$segundos= $segundos%60;//1

echo"$horas:$minutos:$segundos";//2:1:1

?>

De segundos a minutos

Minutos = Redondear fraccion hacia abajo (Segundos/60);

Segundos = Redondear fraccion hacia abajo (Segundos/60)

< ?

//De Segundos a Minutos

$segundos=7261;

$minutos=floor($segundos/60);//121

$segundos= floor($segundos%60);//1

echo"$minutos:$segundos";

?>

En base a todo este cochinero espero y algún alma bondadosa se apiade de la mia, y diga, Victor estás haciendo puras tonterias ¡Así no se hace!.. Se hace así… bla bla bla. :-)

14 Comments

Make A Comment
  • a gravatar pecesama Said:

    Perdon ando desvelado... asi que mejor luego dejo mi comentario :)

  • a gravatar Victor Said:

    jeje, Gracias Pedro. :P

  • a gravatar pecesama Said:

    podrias hacer una clase para que dandole un periodo de tiempo (dos fechas) te regrese los dias o los minutos, años, etc.

  • a gravatar Victor Said:

    Bueno, pues es precisamente lo que yo había hecho.

    Aunque, la pregunta en si me refería a si había una mejor forma de hacer todo este merequeténgue sin necesidad de estas formulitas.

    Pero bueno, parece que no. :P

  • a gravatar pecesama Said:

    al menos el codigo que muestras no es lo mismo que te digo :)

  • a gravatar Victor Said:

    :-S jeje

    Mejor ayudame en mi instalación de sabrosus... muestra esta cosa Fatal error: Call to undefined function: mb_detect_encoding() in /home/misalgo/public_html/sabrosus/include/gettext.inc on line 101

  • a gravatar pecesama Said:

    ya esta solucionado

  • a gravatar Victor Said:

    Sip, ya funciona correctamente :D!

  • a gravatar coke Said:

    buena perro, justo tenia que hacer unos calculos con horas

  • a gravatar HUgo Said:

    Gracias che, muy buena tu explicacion, hacia rato buscaba algo asi

  • a gravatar e$cRi Said:

    Aki os dejo la clase que utilizo yo para manejar fechas del estilo => 2007-01-01 12:00:00

    ex: 2007-08-02 16:48:26

    //--Salida--
    //$valores['anno'] $valores['mes'] $valores['dia']
    //$valores['hora'] $valores['min'] $valores['seg']
    function getValores($fecha)
    {
    list($fechaT, $horaT) = explode(" ",$fecha);

    list($anno,$mes,$dia) = explode("-",$fechaT);
    list($hora,$min,$seg) = explode(":",$horaT);

    $valores=array("anno" => $anno, "mes" => $mes, "dia" => $dia, "hora" => $hora, "min" => $min, "seg" => $seg);
    return $valores;
    }
    //------------------------------------------------------------------------------

    //--Salida--
    //1170889200
    function getTimeUNIX($anno, $mes, $dia)
    {
    return mktime(0, 0, 0, $mes, $dia, $anno);
    }
    //------------------------------------------------------------------------------

    //--Salida--
    //1170949706
    function getTimeUNIXall($anno, $mes, $dia, $hora, $min, $seg)
    {
    return mktime($hora, $min, $seg, $mes, $dia, $anno);
    }
    //------------------------------------------------------------------------------

    //--Entrada--
    //$fecha => ex: 2007-08-02 16:48:26

    //--Salida--
    //1170889200
    function getTimeUNIX_BD($fecha)
    {
    $valores=getValores($fecha);
    return getTimeUNIXall($valores['anno'], $valores['mes'], $valores['dia'], $valores['hora'], $valores['min'], $valores['seg']);
    }
    //------------------------------------------------------------------------------

    //--Entrada--
    //$string => ex: "now" "10 September 2000" "+1 day" "+1 week" "+1 week 2 days 4 hours 2 seconds" "+1 month" "next Thursday" "last Monday"
    //$timeStamp => ex: 1170889200

    //--Salida--
    //1170889200
    function getTimeUNIXFechaFinal($string,$timeStamp)
    {
    return strtotime($string, $timeStamp);
    }
    //------------------------------------------------------------------------------

    //--Entrada--
    //$timeStamp => ex: 1170889200

    //--Salida--
    //2007-08-16
    function getFechaYMD($timeStamp)
    {
    return date("Y-m-d", $timeStamp);
    }
    //------------------------------------------------------------------------------

    //--Entrada--
    //$fecha => ex: 2007-08-02 16:48:26

    //--Salida--
    //2007-08-02
    function getFechaYMD_BD($fecha)
    {
    return date("Y-m-d", getTimeUNIX_BD($fecha));
    }
    //------------------------------------------------------------------------------

    //--Entrada--
    //$timeStamp => ex: 1170889200

    //--Salida--
    //16:48:26
    function getFechaHIS($timeStamp)
    {
    return date("H:i:s", $timeStamp);
    }
    //------------------------------------------------------------------------------

    //--Entrada--
    //$fecha => ex: 2007-08-02 16:48:26

    //--Salida--
    //16:48:26
    function getFechaHIS_BD($fecha)
    {
    return date("H:i:s", getTimeUNIX_BD($fecha));
    }
    //------------------------------------------------------------------------------

    //--Entrada--
    //$timeStamp => ex: 1170889200

    //--Salida--
    // 2007-02-08 16:48:26
    function getFechaYMD_HIS($timeStamp)
    {
    $fecha=getFechaYMD($timeStamp) . ' ' . getFechaHIS($timeStamp);
    return $fecha;
    }
    //------------------------------------------------------------------------------

    //--Entrada--
    //$timeStamp1(fecha final) => ex: 1170889200
    //$timeStamp2(fecha inicial) => ex: 1170889230

    //--Salida--
    // 3 horas
    function getDifFechasH($timeStamp1, $timeStamp2)
    {
    return floor(abs(($timeStamp1-$timeStamp2)/3600));//3600 =>60 * 60
    }
    //------------------------------------------------------------------------------

    //--Entrada--
    //$timeStamp1(fecha final) => ex: 1170889200
    //$timeStamp2(fecha inicial) => ex: 1170889230

    //--Salida--
    // 45 days
    function getDifFechasD($timeStamp1, $timeStamp2)
    {
    return floor(abs(($timeStamp1-$timeStamp2)/86400));//86400 =>24 * 60 * 60
    }
    //------------------------------------------------------------------------------

    //--Entrada--
    //$timeStamp1(fecha final) => ex: 1170889200
    //$timeStamp2(fecha inicial) => ex: 1170889230

    //--Salida--
    // 1 mes
    function getDifFechasM($timeStamp1, $timeStamp2)
    {
    return floor(abs(($timeStamp1-$timeStamp2)/2592000));//2592000 =>30 * 24 * 60 * 60
    }
    //------------------------------------------------------------------------------

    //--Entrada--
    //$fecha1(fecha final) => ex: 2007-09-02 16:48:26
    //$fecha2(fecha inicial) => ex: 2007-08-02 16:48:26

    //--Salida--
    // 3 horas
    function getDifFechasH_BD($fecha1, $fecha2)
    {
    return getDifFechasH(getTimeUNIX_BD($fecha1), getTimeUNIX_BD($fecha2));
    }
    //------------------------------------------------------------------------------

    //--Entrada--
    //$fecha1(fecha final) => ex: 2007-09-02 16:48:26
    //$fecha2(fecha inicial) => ex: 2007-08-02 16:48:26

    //--Salida--
    // 45 days
    function getDifFechasD_BD($fecha1, $fecha2)
    {
    return getDifFechasD(getTimeUNIX_BD($fecha1), getTimeUNIX_BD($fecha2));
    }
    //------------------------------------------------------------------------------

    //--Entrada--
    //$fecha1(fecha final) => ex: 2007-09-02 16:48:26
    //$fecha2(fecha inicial) => ex: 2007-08-02 16:48:26

    //--Salida--
    // 1 mes
    function getDifFechasM_BD($fecha1, $fecha2)
    {
    return getDifFechasM(getTimeUNIX_BD($fecha1), getTimeUNIX_BD($fecha2));
    }
    //------------------------------------------------------------------------------

    ?>

  • a gravatar krlos Said:

    ¿Como llevar de segundos a Horas ( si las hay ), Minutos ( si los hay ) y Segundos?

    Por ejemplo si tengo 28240 Segundos, como hacer que imprima: 7:50:40 Horas

    El proceso es sin duda sencillo, veamos el código y luego la explicación:

    Código Fuente:

    Código:

    60 && $segundos

    Explicando:

    Definimos una función con el nombre de segundos_tiempo(ARG1), donde el ARG1 es el valor que indicamos ( segundos) cuando llamamos la función.

    Realizaremos una serie de operaciones aritméticas, para luego condicionar el resultado.
    $Minutos, tal como se ve; sera igual a la división entre $segundo y 60.

    Citar:
    Ejemplo: 120 segundos / 60 es igual a 2 minutos.

    $horas es igual a la división de $minutos entre 60 , y lo redondeamos hacia abajo con la función matemática floor()

    $minutos2 será igual al residuo (resto) devuelto por la división entre $minutos y 60.

    Y $segundos_2 el residuo de la división entre $segundos, 60, 60, 60 sucesivamente.
    Que no son más que los datos acumulados en los procesos anteriores.

    Luego iniciamos una condición para verificar si el número es menor a 10 y colocarle un 0 (cero) al comienzo: Por ejemplo 9 => 09 , el proceso lo repetimos con los segundos y minutos, con la horas seria innecesario.

    Creamos otra condición para indicar si se ha definido Horas, minutos ó segundos y retornar el formato y estilo correcto.

    Si $segundos es menor que 60 (entonces solo hay segundos)

    Código:

    if($segundos60 && $segundos

  • a gravatar krlos Said:

    bueno debido a que en mi comentario no se puede mostrar codigos dejo aqui la url de donde saque el codigo

    http://www.dxpro.es/index.php?topic=217.msg396#msg396

  • a gravatar Victor De la Rocha Said:

    No se mostró por que lo agarró el filtro anti-SPAM, pero ya los aprobé. Gracias por tus comentarios, últimamente hago las conversiones directamente con las funciones de PHP sin mayor problema y código.

Comments RSS Feed   TrackBack URL

Leave a comment

top