Manejo de Fechas en Php.

Jorge Rubiano
31 de Diciembre del 2005
Hola a todos, bueno mí pregunta creo que es una de las más frecuentes, pero esta es la hora que no sé como realizar este manejo, he revisado una que otra página, he visto de fechas Unix, que no entiendo bien, quisiera saber sí alguien tiene un ejemplo claro, el cual me explique como se hace para que muestre exactamente hace cuanto ingresó una persona a determinado sitio, por ejemplo que diga algo como esto: "Usted entró hace 10 Miutos" o "Usted entró hace diez días".
Espero que alguien en el foro me pueda ayudar, o darme un vínculo donde pueda encontrar la solución a mí cuestión.

Gracias de Antemano....

Califa
31 de Diciembre del 2005
Buenas.

Te dejo un script de ejemplo que hice. Está armado para ser incluido en cualquier página php y es reutilizable. Para usarlo, lo único que tendrías que hacer es agregar estas líneas al comienzo de cada uno de los scripts que vayan a mostrar el tiempo que lleva el visitante en el sitio.

----------------
ejemplo.php
----------------

<?php
include("calculoTiempo.php");
if(isset($flagMostrar) && $flagMostrar == true) {
echo "usted entró hace $tiempoVisita";
}
?>

La variable $tiempoVisita te devuelve un string con los días, horas, minutos y segundos que el visitante lleva en el sitio (mientras dure la sesión). Todo valor que esté en 0 se anula, a menos que el anterior sea distinto de 0. Es decir, muestra "1 hora 8 minutos 10 segundos" en lugar de "0 días 1 hora 8 minutos 10 segundos"; pero "1 hora 0 minutos 43 segundos", en lugar de "1 hora 43 segundos".

Si querés darle otro formato y acceder directamente a los valores de días, horas, minutos y segundos, podés usar la función convertirSegundos() directamente desde cada página. Te va a devolver un array asociativo con los índices [dias], [horas], [minutos] y [segundos]. Después podés mostrarlo como prefieras.

Importante: la línea
<?php
include("calculoTiempo.php");
?>
tiene que estar al principio de cada página que vaya a mostrar el tiempo de visita, antes de cualquier otra cosa. Si no, va a dar error.

El siguiene es el script que hay que incluir en cada página. Grabalo como "calculoTiempo.php". (Se le puede poner cualquier nombre, pero entonces vas a tener que modificar los includes).

-------------
calculoTiempo.php
-------------
<?php
session_start();

if (!isset($_SESSION['horaEntrada'])) {
$_SESSION['horaEntrada'] = mktime();
} else {
$horaActual = mktime();
$tiempoVisitaSegundos = $horaActual - $_SESSION['horaEntrada'];
$strTiempoVisita = mostrarTiempo($tiempoVisitaSegundos);
$flagMostrar = true;
}

function mostrarTiempo ($segundos) {
$tiempoFinal = convertirSegundos($segundos);
$ocultarUnidad = true;
foreach ($tiempoFinal as $indice=>$valor) {
$unidad = $indice;
if ($valor == 1) {
$unidad = pasarSingular($indice);
}
if ($valor == 0 && ocultarUnidad == true) {
$mensaje = "";
} else {
$mensaje .= "$valor $unidad ";
$ocultarUnidad = false;
}
}
return $mensaje;
}

function convertirSegundos($segundosTotales) {
$segundosResto = $segundosTotales % 60;
$minutos = ($segundosTotales - $segundosResto) / 60;
$minutosResto = $minutos % 60;
$horas = ($minutos - $minutosResto) / 60;
$horasResto = $horas % 24;
$dias = ($horas - $horasResto) / 24;
$tiempoFinal['dias'] = $dias;
$tiempoFinal['horas'] = $horasResto;
$tiempoFinal['minutos'] = $minutosResto;
$tiempoFinal['segundos'] = $segundosResto;
return $tiempoFinal;
}

function pasarSingular($valor) {
$singular = rtrim($valor,"s");
return $singular;
}
?>

Cualquier duda, preguntá.

Suerte


Califa
31 de Diciembre del 2005
PD:
Pequeña corrección. El código para el include es éste:

<?php
include("calculoTiempo.php");
if(isset($flagMostrar) && $flagMostrar == true) {
echo "usted entró hace $strTiempoVisita";
}
?>