Foros del Web » Programando para Internet » PHP »

Restar datetime

Estas en el tema de Restar datetime en el foro de PHP en Foros del Web. Hola a todos. He estado buscando y no encuentro mucha información sobre este tema. Tengo en la BD un campo donde me muestra el datetime ...
  #1 (permalink)  
Antiguo 28/09/2011, 14:40
Avatar de Jota_sk  
Fecha de Ingreso: octubre-2008
Mensajes: 188
Antigüedad: 15 años, 6 meses
Puntos: 0
Restar datetime

Hola a todos. He estado buscando y no encuentro mucha información sobre este tema. Tengo en la BD un campo donde me muestra el datetime (se actualiza cada vez que se modifica un campo de la tabla). Y lo que quiero es mediante una función mostrar cuanto tiempo ha pasado desde la ultima consulta (el datetime de la BD). De momento he conseguido lo siguiente aunque la resta me dice que es cero.

Código PHP:
function datetime($session_time) {
    
$date date('Y-m-d H:i:s',time());
    
$time_difference $date $session_time;
    return 
$time_difference;

  #2 (permalink)  
Antiguo 28/09/2011, 14:51
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Restar datetime

Puedes usar DateTime::diff para saber cuanto tiempo ha pasado, ejemplo:

Código PHP:
Ver original
  1. function dt($fecha) {
  2.     $d1 = new DateTime($fecha);
  3.     $d2 = new DateTime('now');
  4.     $i = $d1->diff($d2);
  5.     return $i->format('%h horas %i minutos %s segundos %d días');
  6. }
  7.  
  8. echo dt('28-09-2011 15:00:00');

Sobre tu código no puedes hacer esto

Código PHP:
Ver original
  1. //ESTO ESTA MAL, Necesitas usar funciones como strtotime para poder restar
  2. $date = date('Y-m-d H:i:s',time());
  3. $time_difference = $date - $session_time;

http://php.net/manual/es/datetime.diff.php
http://php.net/manual/es/function.strtotime.php

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 28/09/2011, 16:02
Avatar de Jota_sk  
Fecha de Ingreso: octubre-2008
Mensajes: 188
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Restar datetime

Gracias por responder. He implementado tu funcion. Ahora la duda que tengo es que como puedo hacer que me muestre "han pasado 3 seg" o "han pasado 34 horas" o "han pasado 3 min" o "han pasado 2 semanas"....

Antes tenia una función que la sacaba pero al cambio el tipo de campo no se como hacerlo adaptarlo a tu función.
Seria algo tipo así..

Código PHP:
function datetime($session_time) { 
 
    
$time_difference time() - $session_time 
    
$seconds $time_difference 
    
$minutes round($time_difference 60 );
    
$hours round($time_difference 3600 ); 
    
$days round($time_difference 86400 ); 
    
$weeks round($time_difference 604800 ); 
    
$months round($time_difference 2419200 ); 
    
$years round($time_difference 29030400 ); 

    if(
$seconds <= 60){
        
printf(_ficha_ultimo_seg$seconds);
    }else if(
$minutes <=60){
        if(
$minutes==1){
            echo 
_ficha_ultimo_min1
        }else{
            
printf(_ficha_ultimo_min2$minutes); 
        }
    }
    else if(
$hours <=24){
        if(
$hours==1){
            echo 
_ficha_ultimo_hora1;
        }else{
            
printf(_ficha_ultimo_hora2$hours);
        }
    }
    else if(
$days <=7){
        if(
$days==1){
            echo 
_ficha_ultimo_dias1;
        }else{
            
printf(_ficha_ultimo_dias2$days);
        } 
    }
    else if(
$weeks <=4){
        if(
$weeks==1){
            echo 
_ficha_ultimo_sem1;
        }else{
            
printf(_ficha_ultimo_sem2$weeks);
        }
    }
    else if(
$months <=12){
        if(
$months==1){
            echo 
_ficha_ultimo_mes1;
        }else{
            
printf(_ficha_ultimo_mes2$months);
        }
    }else{
        if(
$years==1){
            echo 
_ficha_ultimo_ano1;
        }else{
            
printf(_ficha_ultimo_ano2$years);
        }
    }

  #4 (permalink)  
Antiguo 28/09/2011, 16:09
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Restar datetime

Bueno el código que te dejé da una diferencia inmediata sin cálculos. pero si lo quieres hacer a la antigua usa strtotime:

Código PHP:
Ver original
  1. $time_difference = time() - strtotime($session_time);

En el caso de que $session_time sea igual a '28-09-2011 17:00:00' por ejemplo

Así restas los segundos correctamente, no con date como lo estabas haciendo en el principio.

Edit: Creo que te pueden servir las funciones de este tema:

http://www.forosdelweb.com/f18/calcu...as-ago-692059/

Dale una mirada.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 28/09/2011 a las 16:19
  #5 (permalink)  
Antiguo 28/09/2011, 16:27
Avatar de Jota_sk  
Fecha de Ingreso: octubre-2008
Mensajes: 188
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Restar datetime

Muchas gracias. Entonces lo que voy a tener que añadir a la funcion es que antes de restar el datetime que le paso a la funcion, sera añadir un par de lineas para cambiar el orden de la fecha. He estado investigando y con date() lo puedo haver tipo asi: $fecha=date("d-m-Y",strtotime($fecha));
  #6 (permalink)  
Antiguo 28/09/2011, 16:30
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Restar datetime

Lo que no puedes restar es directamente date con su formato, pero tienes muchas funciones de fecha y hora para lograrlo. Cuando lo tengas publícalo a ver como te quedó.

Saludos
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #7 (permalink)  
Antiguo 28/09/2011, 16:57
Avatar de Jota_sk  
Fecha de Ingreso: octubre-2008
Mensajes: 188
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Restar datetime

Al final lo tengo de la siguiente manera y funciona perfectamente.

Código PHP:
<?php
function datetime($session_time) { 
    
$session_time date("d-m-Y H:i:s",strtotime($session_time));
    
$time_difference time() - strtotime($session_time) ; 
    
$seconds $time_difference 
    
$minutes round($time_difference 60 );
    
$hours round($time_difference 3600 ); 
    
$days round($time_difference 86400 ); 
    
$weeks round($time_difference 604800 ); 
    
$months round($time_difference 2419200 ); 
    
$years round($time_difference 29030400 ); 

    if(
$seconds <= 60){
        
printf("Hace <b>%b</b> segundos."$seconds);
    }else if(
$minutes <=60){
        if(
$minutes==1){
            echo 
"Hace un minuto"
        }else{
            
printf("Hace <b>%b</b> minutos."$minutes); 
        }
    }
    else if(
$hours <=24){
        if(
$hours==1){
            echo 
"Hace una hora";
        }else{
            
printf("Hace <b>%b</b> horas."$hours);
        }
    }
    else if(
$days <=7){
        if(
$days==1){
            echo 
"Hace un dia";
        }else{
            
printf("Hace <b>%b</b> dias."$days);
        } 
    }
    else if(
$weeks <=4){
        if(
$weeks==1){
            echo 
"Hace una semana";
        }else{
            
printf("Hace <b>%b</b> semanas."$weeks);
        }
    }
    else if(
$months <=12){
        if(
$months==1){
            echo 
"Hace un mes";
        }else{
            
printf("Hace <b>%b</b> meses."$months);
        }
    }else{
        if(
$years==1){
            echo 
"Hace un año";
        }else{
            
printf("Hace <b>%b</b> años."$years);
        }
    }
}
?>

Etiquetas: datetime, restar, tabla
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 09:04.