Foros del Web » Programando para Internet » PHP »

Restar fechas - No me sale!!!

Estas en el tema de Restar fechas - No me sale!!! en el foro de PHP en Foros del Web. Tengo un campo en mysql que guarda la fecha en que se inserto el registro y lo que quiero hacer es simplemente saber cuantos minutos ...
  #1 (permalink)  
Antiguo 30/08/2003, 12:27
 
Fecha de Ingreso: enero-2003
Mensajes: 120
Antigüedad: 21 años, 2 meses
Puntos: 0
Restar fechas - No me sale!!!

Tengo un campo en mysql que guarda la fecha en que se inserto el registro y lo que quiero hacer es simplemente saber cuantos minutos pasaron entre esa fecha y la actual.
Encontre un monton usando el buscador pero no logro entenderlo, encontre que el campo debe ser timestamp pero yo no quiero que se autoactualize, tambien probe datetime y restarselo a la actual usando date() pero no funciona.
Me pueden ayudar a entenderlo?
Gracias!!
  #2 (permalink)  
Antiguo 30/08/2003, 15:11
 
Fecha de Ingreso: febrero-2003
Ubicación: Guanare
Mensajes: 90
Antigüedad: 21 años, 1 mes
Puntos: 0
Puedes sacar la fecha con explode y empezar por los dias ejemplo

$var1=explode("-", $fecha);
echo $var1[2].$var1[1].$var1[0];

osea dia-mes-año. por lo menos sabras cuanto minutos an transcurrido a partir de tener solo el dia el mes y el año por separado
  #3 (permalink)  
Antiguo 30/08/2003, 17:25
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 20 años, 11 meses
Puntos: 1
A ver si no me equivoco,

una manera es guardarla con formato numerico osea con la funcion time() te guarda los segundos trancurridos desde el 1 de enero desde 1970 , lo guardas en un campo INT(14) , cuando lo llamas solo tiens de emplear la funcion date() para sacar la fecha, tienes todas las variables de esta funcion en el manual php http://www.php.net/manual/es/ref.hyperwave.php

El principio que quieres de restar fechas creo que esto es lo mejor.

Al dato que guardaste al principio le restas el time() actual y con una simple operacion matematica sabes los segundo, minutos horas etc
  #4 (permalink)  
Antiguo 30/08/2003, 19:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Usa campos tipo DATETIME y usa las funciones de Mysql que para eso están .. (con un timestamp tambíen podría ser)

Fijate en:
http://www.mysql.com/doc/en/Date_and...functions.html

Vendría ser algo así ...

Código PHP:
SELECT ((TIME_TO_SEC(now()-campo_fecha)))*60) as tiempo_transcurrido FROM tabla 
Se resta la fecha actual a la que tenemos en el campo_fecha (debe ser un DATETIME) .. y el resultado le "sacamos" los segundos que representan con TIME_TO_SEC .. y como son segundos .. pues lo multiplicamos por 60 (por qué quieres minutos). A todo esto .. le asignamos un alias para accederlo por tu: $row[] en $row['tiempo_transcurrido']

(no lo he probado ..así que si me equivoco .. por ahí anda la solución).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 30/08/2003, 22:06
 
Fecha de Ingreso: enero-2003
Mensajes: 120
Antigüedad: 21 años, 2 meses
Puntos: 0
Gracias por las respuestas, probe el de cluster que me parecio mas factible a simple vista y me da error de sintaxis, creo que tiene un ) de mas, simplificandolo un poco....

SELECT TIME_TO_SEC(now()-campo_fecha) as tiempo_transcurrido FROM tabla

$transcurrido=$row['tiempo_transcurrido"];
$transcurrido=ceil($transcurrido/60);

...sucede algo extraño, a veces devuelve los valores correctamente pero otras devuelve cero

Que esta fallando?
  #6 (permalink)  
Antiguo 31/08/2003, 10:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Pero tu campo_fecha .. es de tipo DATETIME ? o es otro?

También recuerda que TIME_TO_SEC devuelve "segundos" no minutos ..

Si quieres solucinoarlo vía SQL (lo más lógico si estás haciendo consultas a una BD) .. sería recomendable mover este mensaje al foro de "base de datos" .. (si así lo deseas .. avisa a un moderador para que lo haga o bien publica tu pregunta en dicho foro).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 31/08/2003, 22:27
 
Fecha de Ingreso: enero-2003
Mensajes: 120
Antigüedad: 21 años, 2 meses
Puntos: 0
Si el campo es datetime, me da lo mismo si es a traves de php o mysql mientras pueda solucionarlo, pero el foro de db tiene muy poco movimiento por eso busco ayuda aqui.
Ahora que lo veo, tengo claro que deberia ser una multiplicacion en lugar de una division, pero extrañamente asi como esta, pasa lo que explique antes, multiplicando el campo, obtengo un resultado totalmente erroneo.
Si alguien tiene un codigo similar funcionando se lo agradecere enormemente ya que estoy trabado con esto.
Gracias y un saludo.
  #8 (permalink)  
Antiguo 31/08/2003, 23:05
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 20 años, 10 meses
Puntos: 2
ummm...ummm

Código PHP:
<?php

$f1 
"2003-9-03 17:00:00"// fecha de caducidad
$f2 date("Y-m-d H:i:s"); // fecha de hoy y ahora
$dif strtotime($f2)-strtotime($f1); // restamos la fecha de caducidad - la fecha de hoy, $dif nos devuelve en segundos el tiempo que falta...;)

echo "<font face=Verdana size=1><center>"//esto es para tallll, lo puedes quitar

function seg2tiempo($segundos){ // funcion para convertir los segundos en una fecha determinada, en dias,horas,minutos,segundos

    
$tiempo $segundos;
    
$signo = ($tiempo<0) ?  "-" "+";
    
$tiempo abs($tiempo);
    
$dias floor($tiempo/86400);
    
$resto_dias $tiempo 86400;
    
$horas floor($resto_dias/3600);
    
$resto_horas $resto_dias 3600;
    
$minutos floor($resto_horas/60);
    
$resto_minutos $resto_horas 60;
    
$segundos floor($resto_minutos);

return 
$signo.$dias." Dias, ".$horas." Horas<br>".$minutos." Min., ".$segundos." Seg."// formateamos el texto que queremos que imprima en pantalla
}
$timereminder seg2tiempo($dif); // pasamos a una variable los datos terminados y ordenados

echo $timereminder//mostramos la fecha que falta en cuenta atras....;)

?>
creo que es lo que estas buscando.... o por lo menos me acerco...

la funcion es de ManoloWeb, un dia me enseño hacerla... Gracias ManoloWeb... a ver si te vemos el pelo que hace tiempo que no te vemos...

internet es compartir entre diferentes culturas e idiomas todo aquello que esta en nuestas manos... brindo por eso !!!
__________________
3w.valenciadjs.com
3w.laislatv.com
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




La zona horaria es GMT -6. Ahora son las 23:00.