Foros del Web » Programando para Internet » PHP »

¿Como calcular el tiempo Transcurrido?

Estas en el tema de ¿Como calcular el tiempo Transcurrido? en el foro de PHP en Foros del Web. Saludos amigos del foro Tengo una duda... Tengo un sistema que maneja las solicitudes recibidas a traves de la pagina, ahora, dichas solicitudes vienen con ...

  #1 (permalink)  
Antiguo 23/02/2006, 13:31
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
¿Como calcular el tiempo Transcurrido?

Saludos amigos del foro

Tengo una duda...

Tengo un sistema que maneja las solicitudes recibidas a traves de la pagina, ahora, dichas solicitudes vienen con una fecha de X dia lo que necesito saber es como calcular el tiempo desde la fecha que se recibio dicha solicitud hasta el dia actual

Por ejemplo:

Si la recibi el 20-02-2006 y hoy es 23-02-2006, que me diga el sistema. Han Transcurrido 3 Días desde que entro la solicitud.........

Creo que me explique bien

Gracias.
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #2 (permalink)  
Antiguo 23/02/2006, 13:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Esas fechas las trabajas en BBDD (por lo menos esa de recibido)? (Base de datos? Mysql?) .. Te hago el comentario por qué si es así .. mejor usa SQL para solventar el problema.

Un saludo,
  #3 (permalink)  
Antiguo 23/02/2006, 13:42
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
Ok CLuster, las fechas si las almaceno en base de datos, al momento de hacer el INSERT INTO de la fecha lo hago en formato UNIX y luego al mostrarla la descompongo asi

Código PHP:
 // Sacando la fecha de UNIX de la base de datos y desglosando el formato a ver

    
$fe$row["fecha"];
    
$fecha strtolower(strftime("%d/%m/%Y"$fe)); 
Y uso MySql........

No entendi lo de usar SQL.... aunque manejo las fechas en base de datos MYSQL

Me imagino que es una funcion que compara la fecha actual del servidor con la fecha en que fue recibida y ahi es donde no se como hacer el desglose o el calculo

Gracias.
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #4 (permalink)  
Antiguo 23/02/2006, 13:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Te hacía el comentario para que ingreses tus fechas en campos de la BBDD tipo:

DATE o DATETIME ...

Cuando haces tu "INSERT" la fecha actual la puedes dar (la del servidor) con SQL y su función "NOW()" o "CURDATE()".

A su vez cuando tu tienes una fecha en tu BBDD en formato DATE o DATETIME puedes formatear su salida (de la original que almacena Mysql a la que tu requieras) con la función (de Mysql): DATE_FORMAT()

Si se trata de hacer cálculos con fechas tienes funciones en SQL para hacer esos cálculos, como por ejemplo DATEDIFF() o equivalentes.

Tienes funciones hasta para trabajar con formatos de fecha en "UNIX Time Stamp" .. pero lo ideal es que uses los "DATE" o equivalente de fechas de Mysql (que para eso trabajas los datos con tu BBDD .. sacale provecho a tu SQL ..)

más info y detalles:
http://dev.mysql.com/doc/mysql/en/Da...functions.html

Un saludo,
  #5 (permalink)  
Antiguo 23/02/2006, 14:08
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
Ok Cluster ahora, como ya tengo toda la codificacion de esa manera insertando las fechas en formato UNIX, te pregunto, se puede trabajar con ese formato para lo que deseo?

Y como me haces referencia a MYSQL, quisiera saber si ese calculo lo realizo en MYSQL o en PHP, eso es lo que no tengo claro.

Gracias.
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #6 (permalink)  
Antiguo 23/02/2006, 14:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
En ese caso .. usa PHP .. (aunque ya te digo que el SQL de Mysql puede manejar fechas en Unix TimeStamp y convertirlas ..)

Si dices que tu campo de fecha tiene un Unix timestamp .. tomalo .. y lo restas a la fecha/hora actual (time() te la devuelve) .. Eso que obtendrás son los segundos de diferencia .. divide y venceras dice el dicho XD

Un saludo,
  #7 (permalink)  
Antiguo 23/02/2006, 14:15
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
Hazlo en mysql. Con mysql 5.0.0 tienes esto:

TIMESTAMPDIFF(interval,datetime_expr1,datetime_exp r2)

Returns the integer difference between the date or datetime expressions datetime_expr1 and datetime_expr2. The unit for the result is given by the interval argument. The legal values for interval are the same as those listed in the description of the TIMESTAMPADD() function.

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
-> 3
mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
-> -1

TIMESTAMPDIFF() is available as of MySQL 5.0.0.
  #8 (permalink)  
Antiguo 23/02/2006, 14:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
En SQL sería algo tipo:

Mysql 4.1.x en adelante me parece ...
SELECT DATEDIFF(FROM_UNIXTIME(fecha),NOW()) as diferencia FROM tabla
ó

Para toda versión de Mysql ...
SELECT (TO_DAYS(NOW())) - TO_DAYS(FROM_UNIXTIME(fecha))) as diferencia FROM tabla

(tomando en cuenta que usas campos de fecha con un Unix Time Stamp en ellos ...)

Un saludo,
  #9 (permalink)  
Antiguo 23/02/2006, 14:15
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
Ok, voy a probar y coloco el script en caso de algun error
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #10 (permalink)  
Antiguo 23/02/2006, 14:48
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
Será asi?

Ok señores, si estoy errado please no me digan bruto...

Yo hice esto

Código PHP:

//


$fe$row1["fecha"];
$fecha strtolower(strftime("%d/%m/%Y"$fe));  
$actual time();
$tran $fecha-$actual;
$di "60";
$tranf $tran/$di
Y me genera este resultado :(

19012127.533333

Que hago mal?
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #11 (permalink)  
Antiguo 23/02/2006, 14:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Para que le das formato a la fecha:
$fecha = strtolower(strftime("%d/%m/%Y", $fe));

antes de "operar con ella" .. Fijate que tu campo fecha trae un dato que son "segundos" ..

Un saludo,
  #12 (permalink)  
Antiguo 23/02/2006, 15:13
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
no entiendo dios..........

Hice esto

Código PHP:
//


$fe$row1["fecha"];
$actual time();
$tran $fe-$actual;
$di "60";
$tranf $tran/$di
y me sale esto

19012152.633333

__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #13 (permalink)  
Antiguo 23/02/2006, 15:25
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
Ok

Corregi mi HORROR jejeje

Código PHP:
//

$fe$row1["fecha"];
$actual=time();
$tran = ($fe-$actual);
$dia= ((60*60)*24);
$tranf = ($tran/$dia); 
Y me arroja este resultado-.......

13202.890543981

MI idea es que diga

2 dias o 4 dias o N cantidad de dias.......
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com

Última edición por carlosfocus; 23/02/2006 a las 15:57
  #14 (permalink)  
Antiguo 23/02/2006, 16:06
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
Probé este código y funciona:
Código PHP:
<?php
  $fe
mktime(0,0,0,2,20,2006);
  
$actual=time();
  
$tran = ($actual-$fe);
  
$dia= ((60*60)*24);
  echo (
$tran/$dia);  
?>
Estas seguro que guardas en la BD un timestamp? Podría darse que el timestamp de mysql sea distinto del de php? Esto último no creo.
  #15 (permalink)  
Antiguo 24/02/2006, 05:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Vamo a ver para aclararnos ..

echo $row1["fecha"];

que devuelve eso? .. Textual .. Que definición de campo usas para ese "fecha" en Mysql?

Un saludo,
  #16 (permalink)  
Antiguo 24/02/2006, 08:05
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
Ok Cluster en mi campo fecha lo tengo asi

fecha = longtext no null

cuando inserto el valo lo hago asi

declare una variable llamada

$fecha = time();

y el resultado lo inserto en el campo fecha de mi tabla
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #17 (permalink)  
Antiguo 24/02/2006, 08:08
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
Cita:
Iniciado por claudiovega
Probé este código y funciona:
Código PHP:
<?php
  $fe
mktime(0,0,0,2,20,2006);
  
$actual=time();
  
$tran = ($actual-$fe);
  
$dia= ((60*60)*24);
  echo (
$tran/$dia);  
?>
Estas seguro que guardas en la BD un timestamp? Podría darse que el timestamp de mysql sea distinto del de php? Esto último no creo.


Claudiovega con esto que me diste si me funciono lo que necesito de que me diga 4 dias....... pero ahora en $fe= mktime(0,0,0,2,20,2006); como hago con la fecha que tengo en mi sistema? es decir en el campo fecha de mi base de datos.
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #18 (permalink)  
Antiguo 24/02/2006, 09:25
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
e intentado mil formas y no se como es
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #19 (permalink)  
Antiguo 24/02/2006, 10:02
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
Cree una tabla (prueba2), le puse un campo fecha de tipo longtext (tal como el tuyo, aunque no es necesario un campo tan grande, basta un varchar(15)), luego en php hice este codigo y funciona

Código PHP:
<?php
  mysql_connect
("127.0.0.1","root","");
  
mysql_select_db("test");
  
$ahora=mktime(0,0,0,2,20,2006);
  
mysql_query("insert into prueba2 values('$ahora')") or die(mysql_error());
  
$result=mysql_query("select * from prueba2");
  
$fila=mysql_fetch_assoc($result);
  
$fe$fila['fecha'];
  
$actual=time();
  
$tran = ($actual-$fe);
  
$dia= ((60*60)*24);
  echo (
$tran/$dia);
?>
  #20 (permalink)  
Antiguo 24/02/2006, 10:09
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
ok claudio mira, lo del mktime(0,0,0,2,20,2006); lo coloque en mi code actual y me funciona, me dice 4 dias con respecto a la fecha de hoy, eso esta bien

Ahora..... yo tengo ya mi campo fecha el cual tengo esta variable declarada asi en mi code

Código PHP:
//

$fe$row["fecha"]; 
y en general tengo mi code asi con lo del mktime que tu colocaste

Código PHP:
//

//$fe= $row["fecha"];
$femktime(0,0,0,2,20,2006);
$actual=time();
$tran = ($fe-$actual);
$dia= ((60*60)*24);
$tranf1 = ($tran/$dia);

$tranf = (int)substr($tranf11); //para que solme quede un numero que seria el primero 
Ahora como sustituyo ese mktime por mi campo fecha? es decir por la variable que tengo ya que me llama el campo fecha que ya tengo

Eso es lo que no entiendo
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #21 (permalink)  
Antiguo 24/02/2006, 10:11
 
Fecha de Ingreso: noviembre-2004
Mensajes: 57
Antigüedad: 20 años
Puntos: 0
hola... tengo en un sistema la fecha de alta del cliente en formato: YYYY-mm-dd H:i:s

$fecha = $resulN[1]; //fecha de alta en el sistema ej: 2006-02-10 10:15:32
$fecha1 = date("Y-m-d H:i:s",time()); //tomo fecha y hora actual

$fechar = strtotime($fecha);
$fechar1 = strtotime($fecha1);

$dife= $fechar1 - $fechar;
$dias = ($dife/60/60)/24;
$ddias = (INT)($dias); // variable almacena los dias transcurridos

echo "han transcurrido $ddias dia/s desde q se registro";

ad+ de los dias calculo las horas......si lo llegas a necesitar avisame...
espero te sirva
saludos
  #22 (permalink)  
Antiguo 24/02/2006, 10:16
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
Cita:
Iniciado por carlosfocus
ok claudio mira, lo del mktime(0,0,0,2,20,2006); lo coloque en mi code actual y me funciona, me dice 4 dias con respecto a la fecha de hoy, eso esta bien

Ahora..... yo tengo ya mi campo fecha el cual tengo esta variable declarada asi en mi code

Ahora como sustituyo ese mktime por mi campo fecha? es decir por la variable que tengo ya que me llama el campo fecha que ya tengo

Eso es lo que no entiendo
Si te fijas en el codigo que te envié, sale el ejemplo usando base de datos y todo tal cual o pides, excepto por una cosa, al ingresar un dato a la bd no lo hago usando time(), sino mktime().
  #23 (permalink)  
Antiguo 24/02/2006, 10:20
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
OK ala final deje esto
Código PHP:
//
$fe$row["fecha"];
$actual=time();
$tran = ($fe-$actual);
$dia= ((60*60)*24);
$tranf = ($tran/$dia); 
y me sale esto

-- -67328 Días

de resultado :( dios voy a parar a loco con esto
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #24 (permalink)  
Antiguo 24/02/2006, 10:48
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
sinceramente o soy muy bruto o no entiendo :(
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #25 (permalink)  
Antiguo 24/02/2006, 10:49
 
Fecha de Ingreso: noviembre-2004
Mensajes: 57
Antigüedad: 20 años
Puntos: 0
:S

proba con lo q te pase...

tu ersultado te da negativo pq estas restando la fecha inicial a la final....te va a dar siempre negativop.-..
.

proba con:

$fecha = $row["fecha"]; //fecha de alta en el sistema ej: 2006-02-10 10:15:32
$fecha1 = date("Y-m-d H:i:s",time()); //tomo fecha y hora actual

$fechar = strtotime($fecha);
$fechar1 = strtotime($fecha1);

$dife= $fechar1 - $fechar; // aca resto la facha final a lña inicial
$dias = ($dife/60/60)/24;
$ddias = (INT)($dias); // variable almacena los dias transcurridos
  #26 (permalink)  
Antiguo 24/02/2006, 10:53
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
Lo coloque tal cual y me da este resultado


13203 Días


:(
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #27 (permalink)  
Antiguo 24/02/2006, 11:21
 
Fecha de Ingreso: noviembre-2004
Mensajes: 57
Antigüedad: 20 años
Puntos: 0
bueno mira....en www.gorriak.com/fecha.php vas a encontrar el script andando..... y es asi:

<?php
$fecha = "2006-02-20 10:10:01";
$fecha1 = date("Y-m-d H:i:s",time()); //tomo fecha y hora actual

$fechar = strtotime($fecha);
$fechar1 = strtotime($fecha1);

$dife= $fechar1 - $fechar; // aca resto la facha final a lña inicial
$dias = ($dife/60/60)/24;
$ddias = (INT)($dias);

echo "del $fecha hasta $fecha1 hay <b>$ddias</b> dia/s de diferencia";
?>

creo q te da un numero muy alto...por la manera q tomas la fecha actual....
yo lo q hago es tomar la fecha actual en el mismo formato q la inicial...para luego hacer el strtotime:

$fecha = "2006-02-20 10:10:01";
$fecha1 = date("Y-m-d H:i:s",time()); //tomo fecha y hora actual


probalo....espero te sirva--.saludops
  #28 (permalink)  
Antiguo 24/02/2006, 11:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
El detalle es que usa directamente una fecha en "timestamp" no en un formato de fecha "DATETIME" de Mysql (para lo cual debería usar SQL para hacer ese cálculo).

No tendría que usar: strtotime() .. sino time() directamente para la fecha/hora actual .. y su $row['fecha'] que ya tiene un "timestamp" .. El caso es que todo ese resultado hay que estar claro que son "segundos" (cara a las operaciones matemáticas).

Un saludo,
  #29 (permalink)  
Antiguo 24/02/2006, 11:44
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 11 meses
Puntos: 0
Creo que mi problema es como inserto la fecha en el servidor

Ok, voy a reestructurar el codigo

este es mi codigo para insertar la fecha

Código PHP:
//

,'".$_POST["fecha"]."')" .  mysql_error()); 
ya que tengo un campo oculto en el formulario que es fecha que es donde hago el time()

Eso es adecuado? o como inserto la fecha...

En verdad estoy enredadisimo........

comenzare desde el principio jejeje o mejor dicho hare las cosas como deben ser..
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #30 (permalink)  
Antiguo 24/02/2006, 11:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Cita:
comenzare desde el principio jejeje o mejor dicho hare las cosas como deben ser..
Si es así . .por mi parte te recomiendo que leas una vez más mi anterior respuesta:

El tipo de campos que debes usar en tus campos para fechas:
http://www.forosdelweb.com/showpost....28&postcount=4

Y el cálculo vía SQL de dias de difrencias:
http://www.forosdelweb.com/showpost....65&postcount=8

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 11:19.