Inicio ¿Sidebar? RSS @MisAlgoritmos at Twitter

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. :-)

16 comentarios en Timestamp, php y algo de lógica

pecesama

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

pecesama

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

Victor

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

pecesama

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

Victor

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

pecesama

ya esta solucionado

Victor

Sip, ya funciona correctamente :D!

coke

buena perro, justo tenia que hacer unos calculos con horas

HUgo

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

e$cRi

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

?>

krlos

¿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

krlos

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

Victor De la Rocha

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.

hunk

Gracias krlos es lo q andaba buscando xD, y yo q no keria escribirlo xD!

Directo a los favoritos :)

Gracias!

armando

quisiera poder trabajar con los lenguajes de programacion lo veo muy interesante necesito de su ayuda muchas gracias.....

Deja un comentario

¿Cuanto es 2 + 3 - 5? =

Suscribirse a los comentarios.